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

Winapi 使用GDIPlus(WIn32 C+;+;)显示存储为alpha资源的图标,winapi,icons,gdi+,embedded-resource,Winapi,Icons,Gdi+,Embedded Resource,我有一个带有部分alpha(alpha值介于0和255之间)的图标,我希望使用GDIPlus显示该图标。使用GDI+的位图构造器(采用直接文件名)时,文件会正确显示。但是,当从资源加载时,它在识别alpha时遇到问题。我查看了MSDN,发现alpha有问题:。通过从图标中检索ICONINFO结构,我可以去掉完全透明的像素,但是,部分透明的像素仍然显示为完全不透明或完全透明 我想知道如何使用部分alpha值从资源中的图标创建Win32位图。您可以使用获取指向图标及其图像数据的指针。您可以将指向图像

我有一个带有部分alpha(alpha值介于0和255之间)的图标,我希望使用GDIPlus显示该图标。使用GDI+的位图构造器(采用直接文件名)时,文件会正确显示。但是,当从资源加载时,它在识别alpha时遇到问题。我查看了MSDN,发现alpha有问题:。通过从图标中检索ICONINFO结构,我可以去掉完全透明的像素,但是,部分透明的像素仍然显示为完全不透明或完全透明

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

您可以使用获取指向图标及其图像数据的指针。您可以将指向图像数据的指针传递给相应的。这有点麻烦,因为图标有一个

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

更新

显然LoadIcon确实正确加载了alpha。当您从HICON构造GdiPlus::位图时,问题似乎是GdiPlus不遵守alpha。你能做的是:

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

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

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

我想知道如何从 具有部分alpha值的资源中的图标


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

将图标存储为资源并将其加载到HICONs中没有问题。它可以很好地处理部分alpha。显示一些代码。从资源加载部分透明的图标完全没有问题。/*加载并锁定资源*/HICON icon=LoadIcon(modhandle,MAKEINTRESOURCE(_wtoi(vImageName));位图=Gdiplus::位图::FromHICON(图标);因此加载的位图具有零或完整的alpha,并且没有部分alpha。我始终使用LoadImage,因为它可以控制图标大小。但他们都没有关于部分阿尔法的问题。应用程序通常通过调用LoadIcon来显示带有alpha的标准IDI_xxx图标。调用LoadIcon后出现问题。我使用的图标不是标准IDI_xxx图标(可能是IDI_xxx图标没有部分alpha,但我不确定),而是资源中包含的自定义图标。MSDN上也报告了一个社区添加错误(请参阅“社区添加”),我不确定我是否因此或其他原因而面临问题。请使用LoadIcon和LoadImage加载我自己的自定义图标。没问题。IDI_xxx也有部分阿尔法。你的问题在别处。