2009-12-05 93 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。