2009-12-05 92 views
1

因此,我使用AlphaBlend()将矩形从一个HBITMAP复制到另一个。使用AlphaBlend()和FillRect()

它的工作,但有一个问题。每当我使用FillRect()函数时,HBITMAP中的alpha值就会被砰砰地撞到0.每次。所以我必须GetDIBits(),在每次调用Win32 api函数(如FillRect())之后,将alpha重置回255,然后SetDIBits()。

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

回答

4

除AlphaBlend ... BitBlt是唯一的其他GDI功能,将以任何方式保留Alpha通道。因此

您的选项基本上都是:

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

  2. 使用alpha知道的绘画API,如GdiPlus而不是GDI。