使用AlphaBlend()和FillRect()

时间:2009-12-05 21:47:23

标签: c++ winapi gdi

所以,我正在使用AlphaBlend()将矩形从一个HBITMAP复制到另一个HBITMAP。

它有效,但有一个问题。每当我使用FillRect()函数时,HBITMAP中的alpha值每次都会被抨击为0.

所以我必须使用GetDIBits(),在每次调用Win32 api函数(如FillRect()之后)将alpha重置为255,然后重置SetDIBits()。

那么,有没有办法创建一个HBRUSH或以其他方式告诉FillRect()不要触摸它将要绘制的HBITMAP中的alpha通道值?

1 个答案:

答案 0 :(得分:4)

除了AlphaBlend ... BitBlt是唯一能够以任何方式保留alpha通道的其他GDI函数。

因此,您的选择基本上是:

  1. 切换到使用DIBSections。这不能解决GDI apis覆盖alpha通道的基本问题,但作为DIBSection,您可以避免昂贵的DDB - > DIB - >修补alpha通道需要DDB转换。通过DIBSections,您可以访问HBITMAP和存储位图位的存储器部分。

  2. 使用像GdiPlus这样的alpha识别绘画API而不是GDI。