使用GDI创建透明位图?

10

我希望在我的应用程序中实现一个层次结构系统,想要创建一些透明的位图,并在它们上面添加内容,然后将它们叠加在一起,但是如何避免将每个像素设置为 (0,0,0,0)。我正在使用 Pure win32,而不是 MFC,谢谢。

2个回答

12

什么是“透明”?

如果您想要部分(至完全)透明度,则使用AlphaBlend是可用的GDI API。加载具有alpha通道的位图比较麻烦 - 基本Windows API支持的唯一格式为带有alpha通道的32bpp .BMP文件,其中每个字节的前8位为alpha通道 - 而且低位字节应该是预乘的。

您可以使用GDI+来加载各种带有alpha通道的图像格式 - PNG可能是最好的选择,并将其涂抹到32bpp DIBSection上,这样您就可以使用AlphaBlend和普通的GDI函数。

如果您想要简单的透明度掩码而不是完整的alpha通道,则可以使用TransparentBlt以及颜色键来在位图涂抹时屏蔽掉一些区域。


-2

GDI在位图和一般情况下不支持透明度。考虑使用GDI+


它有一定的功能 - 它支持使用位图中的Alpha组件,通过AlphaBlend将一个位图透明地混合到另一个位图上。此外,还有一些支持Windows Aero的奇怪扩展,这也可能算作一种支持。不过,你对于一般情况是正确的。 - David
还有TransparentBlt,但是当使用32位图像(例如指定透明度的图像)时,AlphaBlend是更好的选择。 - dlanod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接