2010-04-28 160 views
8

我想在我的应用程序中实现一个分层系统,并且正在考虑创建一堆透明位图,向它们添加内容,然后将它们彼此重叠,如何在不将每个像素设置为(0,0 ,0,0)。我使用的是纯win32,不是MFC,谢谢。使用GDI创建透明位图?

回答

10

透明是什么意思?

如果您正在寻找部分(全部)透明度,那么AlphaBlend是要使用的GDI API。使用alpha加载位图非常棘手 - 基本Windows API支持使用alpha加载位图的唯一格式是32bpp .BMP文件,每个字节的前8位都有一个alpha通道,而较低的字节应该是预乘。

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

如果你想要一个简单的透明度蒙版而不是一个完整的alpha通道,你可以使用TransparentBlt以及一个颜色键来遮挡位图的区域。

-1

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

+0

它排序 - 它支持透明混合一个位图到另一个位图,通过AlphaBlend在位图中使用alpha组件。还有一些奇怪的扩展可以支持Windows中的Aero,这也可以算得上。尽管如此,你是对的。 – 2010-05-05 00:26:17

+0

还有TransparentBlt,但是当使用32位图像(例如指定了透明度的图像)时,AlphaBlend就是要走的路。 – dlanod 2010-05-05 05:44:28