自从我不得不处理Win32菜单以来已经有很长一段时间了。我需要在Win32上下文弹出菜单中添加一些PNG图标。当然,我希望在此过程中保留PNG透明度和所有每像素alpha。这可能吗?
我在考虑使用SetMenuItemBitmaps
。这是要走的路吗?
我将PNG作为“PNG”资源导入,但我似乎无法使用LoadBitmap
或LoadImage
加载它们。我发现了一些关于使用Gdi+
的建议,但显然我不会绘制菜单 - 系统会。
似乎有办法从Gdi + HBITMAP
获得Bitmap
,但看起来好像所有的alpha都在这个过程中迷失了。 AFAIK,HBITMAP
可以愉快地托管alpha信息。
答案 0 :(得分:3)
您需要GDI +才能加载PNG。然后,您需要创建一个正确大小的32位alpha位图,在位图上创建一个Graphics,并使用DrawImage将PNG复制到位图。这会为您提供带有Alpha通道的位图。
这样的事情:
Image* pimgSrc = Image::FromFile("MyIcon.png"L, FALSE);
Bitmap* pbmpImage = new Bitmap(
iWidth, iHeight,
PixelFormat32bppARGB
);
Graphics* pgraphics = Graphics::FromImage(bmpImage))
{
// This draws the PNG onto the bitmap, scaling it if necessary.
// You may want to set the scaling quality
graphics->DrawImage(
imageSrc,
Rectangle(0,0, bmpImage.Width, bmpImage.Height),
Rectangle(0,0, imgSrc.Width, imgSrc.Height),
GraphicsUnitPixel
);
}
// You can now get the HBITMAP from the Bitmap object and use it.
// Don't forget to delete the graphics, image and bitmap when done.
答案 1 :(得分:1)
也许您可以使用图标代替?
以下是我使用图标而不是PNG的原因:
要从资源或文件中加载图标,请使用:
LoadImage()
要绘制图标,请使用:
DrawIcon() or DrawIconEx()