使用GDIPlus显示存储为alpha资源的图标(WIn32 C ++)

时间:2012-09-20 11:40:37

标签: winapi icons gdi+ embedded-resource

我想要使用GDIPlus显示部分alpha(alpha值介于0到255之间)的图标。当使用采用直接文件名的GDI +的Bitmap构造函数时,文件会正确显示。但是,从资源加载时,它在识别alpha时出现问题。我查看了MSDN,并且alpha存在问题:http://msdn.microsoft.com/en-us/library/windows/desktop/ms536318.aspx。通过从Icon中检索ICONINFO结构,我可以摆脱完全透明的像素,但是,部分透明像素仍然显示为完全不透明或完全透明。

我想知道如何使用部分alpha值从资源中的Icon创建Win32位图。

2 个答案:

答案 0 :(得分:3)

您可以使用LoadResource获取指向图标及其图像数据的指针。您可以将指向图像数据的指针传递给相应的Bitmap constructor。这是一件苦差事,因为图标有peculiar resource format

如果可能,将图像存储为透明(即32bpp argb)位图会更简单。在这种情况下,您可以将LoadImage与LR_CREATEDIBSECTION一起使用。

<强>更新

显然,LoadIcon确实正确加载了alpha。当你从HICON构造一个GdiPlus :: Bitmap时,问题似乎是GdiPlus不尊重alpha。你能做的是:

  • 使用LoadIcon加载图标。
  • 使用GetIconInfo获取ICONINFO。 hbmColor是透明位图的句柄。
  • 使用GetDIBits从hbmColor获取位图位。
  • 将数据传递给带有位并理解alpha的Bitmap constructor

答案 1 :(得分:1)

在调用LoadIcon 后,alpha通道会被干扰。加载图标的Win32 API,例如LoadIcon,LoadImage等已得到充分证明。它们可靠地加载带有部分alpha的图标。

您需要调查加载图标后执行的代码。我不能给你一个解决方案或解释,但我相信LoadIcon不是罪魁祸首。

  

我想知道如何从一个创建Win32位图   资源中带有部分alpha值的图标。

调用GetIcon或GetImage以获取HICON。然后调用GetIconInfo。您需要的位图位于ICONINFO结构的hbmColor字段中。