2010-05-27 58 views
1

我有一個帶有R,G,B顏色通道和R,G,B alpha通道的24位位圖的24位位圖。我想要alpha通過alpha通道分別將第一個位圖混合到GDI中的HDC或Direct2D中的RenderTarget。例如,假設對於一個像素,位圖顏色是(192,192,192),HDC顏色是(0,255,255),alpha通道是(30,40,50)。最終的HDC顏色應該是(22,245,242)。我知道我可以首先將HDC BitBlt存儲到HDC,然後手動計算每個像素的顏色,最後返回BitBlt進行alpha混合。我只是想避免額外的blitting,並讓API完成他們的工作(因爲他們在內核空間中更快)。GDI中的每像素每分量alpha混合

我想到的第一個想法是將源位圖分成3個純紅,純綠和純藍的8位位圖,進行正常的alpha混合,然後將3個輸出位圖合併到HDC中。但是我沒有找到一種方法來在Windows中原生地進行分割和合成(Direct2D圖層有幫助嗎?)。而且,分割和合成可能需要許多額外的複製。性能開銷會太高。

或者也許做3次alpha混合。每個通道都應用一個通道的混合,而另一個通道保持不變。

感謝您的任何評論。

編輯:我發現這個question,答案應該是很好的參考這個問題。但是,除AC_SRC_OVER外,不支持其他混合操作。爲什麼微軟不改進他們的API?

回答

1

我很確定每個通道的alpha在Windows或OSX的標準庫中都不被支持。您可能需要獨立處理3個圖層(將每個圖層作爲單獨的32位位圖處理),然後編寫它們。

+0

謝謝。雖然3 alpha混合已經很昂貴,但真正的問題是如何組合各個通道的位圖。自定義DIBSection可能會更容易。 只有AlphaBlend具有更多操作類型... – 2010-06-21 11:04:59