2012-09-28 48 views
2

我一直在尋找更快的方式來使用混合效果「乘」在我的位圖上。我曾嘗試使用PorterDuff.Multiply,但它不能在包含Alpha通道的位圖上達到所需結果,任何帶有0 alpha的任何東西都會變成黑色。在C#中快速的每像素混合效果「乘」(Android版)

我已經閱讀並且似乎唯一可以實現效果的方法(photoshop/gimp的'multiply'圖層混合)是通過應用每個像素的效果。

OpenGL不是應用程序的選項。

我不確定我是否理解了維基百科建議的混合模式的算法。

TopColour * BottomColour/255

是:

ColorC.R = ColorA.R * ColorB.R/255; 
ColorC.G = ColorA.G * ColorB.G/255; 
ColorC.B = ColorA.B * ColorB.B/255; 
// Alpha = Alpha? 

// This example is suggesting Android.Graphics.Color.A/R/G/B is writeable, 
// it's not - this is just for readability. 
// ColorA = Top, ColorB = Bottom, ColorC = Result 

難道是更快地Color.ToArgb轉換,並與整數工作? 最後,我是正確計算乘法效應 - 它不能正常顯示:(

我堅持,任何幫助將大大讚賞

謝謝

+0

這篇文章可能會揭示一些光http://kevindion.com/2011/01/android-bitmap-blending-color-channels/ – auselen

+0

我覺得這個提示是使用ARGB_8888模式,這樣你就可以以混合阿爾法值。 – Cheesebaron

+0

@auselen謝謝你!讀了這些讓我對雲霧繚繞的頭腦有所瞭解。由於那篇小文章,我對混合過程有了更多瞭解。很好找! – Ecnelis

回答