今天使用GDI+中Bitmap的GetHBITMAP方法返回HBITMAP后的到得CBitmap对象后,添加到CImagelist中后,原本透明的背景结果不透明了,结果找到了原因,截了一段代码把纠正方法写在下面:
Bitmap bmp(L"2.bmp");
HBITMAP hBitmap=NULL;
Color color(255,255,255,255);
bmp.GetHBITMAP(color,&hBitmap);
bitmap.Attach(hBitmap);
int w=bmp.GetWidth();
int h=bmp.GetHeight();
const UINT nSize = w * h * 4;
BYTE* BG = new BYTE[nSize];
bitmap.GetBitmapBits(nSize,BG);
for (UINT i = 3; i< nSize; i += 4)
{
//GDI+会把RGBN的N值为255,如果为255那么在CImagelist中透明效果就有问题,所以要重新设为0
BG[i] = 0;
}
bitmap.SetBitmapBits(nSize,BG);
m_image.Add(&bitmap, RGB(255,0,255));