所以,我正在使用AlphaBlend()将矩形从一个HBITMAP复制到另一个HBITMAP。
它有效,但有一个问题。每当我使用FillRect()函数时,HBITMAP中的alpha值每次都会被抨击为0.
所以我必须使用GetDIBits(),在每次调用Win32 api函数(如FillRect()之后)将alpha重置为255,然后重置SetDIBits()。
那么,有没有办法创建一个HBRUSH或以其他方式告诉FillRect()不要触摸它将要绘制的HBITMAP中的alpha通道值?
答案 0 :(得分:4)
除了AlphaBlend ... BitBlt是唯一能够以任何方式保留alpha通道的其他GDI函数。
因此,您的选择基本上是:
切换到使用DIBSections。这不能解决GDI apis覆盖alpha通道的基本问题,但作为DIBSection,您可以避免昂贵的DDB - > DIB - >修补alpha通道需要DDB转换。通过DIBSections,您可以访问HBITMAP和存储位图位的存储器部分。
使用像GdiPlus这样的alpha识别绘画API而不是GDI。