如何将HICON从GDI复制到GDI +并具有透明度?

时间:2012-07-05 04:54:03

标签: winapi visual-c++ transparency gdi+ gdi

无论我做什么,我都会在图标周围出现白色/黑色边框......是什么给出了?!

甚至可能是否正确执行此操作?如何将HICON复制到具有透明度的GDI +位图?

1 个答案:

答案 0 :(得分:5)

我浪费了好几个小时。

结合我之前多次浪费了多少次,是的,这令人沮丧。

原来这是GDI +的一个问题。解决方法是here;这里有一些可能有用的代码:

HICON hIcon = ...;

ICONINFO ii; GetIconInfo(hIcon, &ii);
BITMAP bmp; GetObject(ii.hbmColor, sizeof(bmp), &bmp);

Gdiplus::Bitmap temp(ii.hbmColor, NULL);
Gdiplus::BitmapData lockedBitmapData;
Gdiplus::Rect rc(0, 0, temp.GetWidth(), temp.GetHeight());

temp.LockBits(&rc, Gdiplus::ImageLockModeRead, temp.GetPixelFormat(), &lockedBitmapData);

Gdiplus::Bitmap image(
    lockedBitmapData.Width, lockedBitmapData.Height, lockedBitmapData.Stride,
    PixelFormat32bppARGB, reinterpret_cast<BYTE *>(lockedBitmapData.Scan0));

temp.UnlockBits(&lockedBitmapData);

// Now 'image' has the icon, with transparency