在C#(适用于Android)中快速实现每像素混合效果“multiply”

3
我一直在寻找一种更快的方法来使用位图上的混合效果“multiply”。我尝试过使用PorterDuff.Multiply,但它不能在包含 Alpha 通道的位图上实现期望的结果,透明度为 0 的任何内容都会变成黑色。
我查阅了大量资料,似乎我能够实现我想要的效果(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
< p>把Color.ToArgb转换成整数然后再处理,速度会更快吗?最后,我的乘法运算是正确的吗 - 它没有正常显示 :(

我卡住了,任何帮助都将受到极大的赞赏。

谢谢。


这篇文章可能会给你一些启示 http://kevindion.com/2011/01/android-bitmap-blending-color-channels/ - auselen
我认为这个提示是使用ARGB_8888模式,这样你就能够混合Alpha值。 - Cheesebaron
@auselen 谢谢!阅读那篇文章让我茅塞顿开。因为那篇小文章,我对混合过程的理解更加深入了。真是个好发现! - Ecnelis
@Cheesebaron,使用混合模式相乘,Alpha 也会被相乘吗?ColorC.A = ColorA.A * ColorB.A / 255;我试一下!:)谢谢。 (还是我需要先将 Alpha 与其他颜色通道相乘?><这就是我困惑的地方lol)。 - Ecnelis
1个回答

0

我之前不知道renderscript,这肯定会派上用场。我需要观看那个视频——已经将其添加到我的工具栏开头的书签中了。谢谢。 - Ecnelis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接