2

我目前正在开发一个 Android 应用程序。我主要使用 drawBitmap 方法在 Canvas 对象上进行所有绘图。我正在尝试实现的当前效果是在两个位图之间“交叉淡入淡出”。这两个位图是相似的图像,只有外部不同。通过交叉淡入淡出,相同的内部部分应保持不变,而外部区域似乎从一种状态淡入到另一种状态。我查看了每个可用的 PorterDuff.Modes,但没有一个符合我想要的确切效果。基本上我认为我想要实现的等式是:

w = 权重(从 0 到 1) a_i, c_i = 图像 i = 1 和 2 的 alpha 和颜色值

(a1, c1) +(w) (a2, c2) = ((1-w)*a1 + w*a2, ((1-w)*a1*c1 + w*a2*c2) / ((1- w)*a1 + w*a2))

(当然,也考虑到零除法 - 这基本上是两个图像的加权“平均”)

有什么办法可以编写“自定义” PorterDuff 模式来实现这一点?如果有更有效的方法来实现这一点,我不想必须提取每个位图的颜色数组并在每一帧手动循环它们来进行这种转换。

如果有人知道一种有效地解决这个问题的方法,或者知道另一种我不知道并且无法在网上找到的方法,那将不胜感激。此外,如果我的转变似乎不适合这项任务,也欢迎您提出批评。

PS 我试图只插入 alpha 值并按原样绘制两个图像,但是例如在插值的中间,在通常为 1 的区域中,两者的 alpha 值都是 0.5,并且绘制两个 0.5 alpha 图像会导致透明度,这不是我想要的。正常的 ADD 操作最终会使颜色饱和,这也是不希望的。

4

0 回答 0