3

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

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

4

2 回答 2

3

您可以使用LoadResource获取指向图标及其图像数据的指针。您可以将指向图像数据的指针传递给适当的Bitmap 构造函数。这有点麻烦,因为图标有一种特殊的资源格式

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

更新

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

  • 使用 LoadIcon 加载图标。
  • 使用 GetIconInfo 获取 ICONINFO。hbmColor 是透明位图的句柄。
  • 使用 GetDIBits 从 hbmColor 获取位图位。
  • 将数据传递给接收位并理解 alpha的位图构造函数。
于 2012-09-20T14:25:54.660 回答
1

调用 LoadIconalpha 通道受到干扰。加载图标的 Win32 API,例如 LoadIcon、LoadImage 等已经得到了很好的证明。他们可靠地加载带有部分 alpha 的图标。

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

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

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

于 2012-09-21T07:04:30.777 回答