C++ 使用GDI创建透明位图?

C++ 使用GDI创建透明位图?,c++,c,winapi,drawing,C++,C,Winapi,Drawing,我想在我的应用程序中实现一个分层系统,并考虑创建一组透明位图,向其中添加内容,然后将它们相互叠加,如何在不将每个像素设置为(0,0,0,0)的情况下实现这一点。我使用的是纯win32,不是MFC,谢谢。GDI不支持位图和一般情况下的透明度。考虑使用.< /P> < P>透明是什么意思?< /P> 如果您正在寻找部分(到完全)透明度,那么使用的是GDIAPI。使用alpha加载位图很棘手-基本windows API支持的使用alpha加载位图的唯一格式是一个32bpp.BMP文件,每个字节的前8位

我想在我的应用程序中实现一个分层系统,并考虑创建一组透明位图,向其中添加内容,然后将它们相互叠加,如何在不将每个像素设置为(0,0,0,0)的情况下实现这一点。我使用的是纯win32,不是MFC,谢谢。

GDI不支持位图和一般情况下的透明度。考虑使用.< /P> < P>透明是什么意思?< /P> 如果您正在寻找部分(到完全)透明度,那么使用的是GDIAPI。使用alpha加载位图很棘手-基本windows API支持的使用alpha加载位图的唯一格式是一个32bpp.BMP文件,每个字节的前8位有一个alpha通道-较低的字节应预先乘以

使用GDI+加载各种图像格式是可能的,alpha-PNG可能是最好的选择,blit可以加载到32bpp的DIBSection上,这样您就可以使用AlphaBlend和普通的GDI函数


如果你想要一个简单的透明蒙版而不是一个完整的alpha通道,你可以在对位图进行blitting时使用颜色键来遮罩位图的区域。

它也是如此-它支持通过AlphaBlend在位图中使用alpha组件,将一个位图透明混合到另一个位图上。在windows中支持Aero的一些奇怪的扩展可能也很重要。不过,一般情况下你是对的。也有TransparentBlt,但当使用32位图像(例如指定了透明度的图像)时,AlphaBlend是一个不错的选择。