2013-01-03 45 views
0

我有一些使用System.Drawing.SolidBrush繪製半透明三角形的GDI代碼。我正在嘗試使用適當的3D渲染API(OpenGL/Direct3D11)重新實現代碼,但我不確定什麼混合公式用於這些三角形以獲得與原始GDI代碼相同的輸出。 (func = GL_FUNC_ADD,eq = GL_ONE,GL_ONE)或插值(func = GL_FUNC_ADD,eq = GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA),但這兩個看起來都不太對。這幾乎可以肯定是我新代碼中的一個錯誤,但我想確保在繼續之前我正在朝着正確的目標努力。有人知道合適的混合方程嗎?什麼混合方程是System.Drawing.SolidBrush使用?

編輯:這是有關C#代碼,剝離語境:

using System.Drawing; 
SolidBrush b = new SolidBrush(Color.FromArgb(alpha,red,green,blue)); 
Point[] points = ...; 
Graphics g; 
g.FillPolygon(b,points); 

我的問題是,什麼顏色實際上將被寫入,在刷的RGBA和目的地像素的RGBA的條款?我可以找到的所有文檔都只是說「使用alpha來控制Brush的透明度」或者其他同樣模糊的內容;我很好奇實際的混合方程是什麼。

+0

什麼是你試圖重新實現的「GDI代碼」? –

+0

這是一些來自遠期同事的圖像處理代碼,我試圖恢復並整合到一個新的非GDI項目中。具體細節是專有的,但與問題無關。但是,如果有幫助,我已經添加了相關代碼的一部分。 – postgoodism

回答

0

根據MSDN,System.Drawing.Graphics具有名爲CompositingMode的屬性,其可以是SourceOverSourceCopy

默認一個是SourceOver,其

指定當顏色被渲染,這是混有背景色。混合由正在渲染的顏色的alpha分量決定。

正如我已經測試,這裏使用的混合策略是alpha composition,其由下面的等式在圖像B確定在區域圖像A中的像素值:

Alpha composition equation

這裏α a和α b是圖像A和圖像B的標準化α值; C a和C b是圖像A和圖像B的RGBA值; C o是輸出圖像的RGBA值。

相關問題