安卓颜色滤镜 - 波特-达夫模式



我正在尝试解决安卓ColorFilters的问题。文档非常差,因此主要方法是尝试不同的变体。

问题:

有一个位图。某些像素的 alpha=255,其他像素的 alpha=0。我正在尝试用特定颜色画一个圆。我希望位图中的 alpha 通道保持不变,但在绘制时,我想将颜色乘以位图-alpha。

因此,在绘制圆圈时,我希望不绘制alpha=0的像素,但将alpha=255的像素绘制为我想要的颜色。阿尔法通道不应更改。

我正在尝试使用 porter-duff ColorFilter (android sdk 中的 PorterDuffColorFilter 类)。

官方网站上有太多的模式和无法理解的描述:http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html

我想我应该使用DST_ATOPSRC_ATOP,但它们不像我描述的那样工作。

此外,波特-达夫颜色过滤器的构造函数中还有一个奇怪的参数srcColor

我不明白公式中的"Sa"和"Sc"是什么意思[Da, Sc * Da + (1 - Sa) * Dc].它可以来自传递给colorfilter构造函数的颜色,也可以由"paint.setColor"设置颜色。

有人知道,它是如何工作的吗?

SaSc分别是"source alpha"和"source color"的缩写。PorterDuffColorFilter构造函数中的srcColor参数是用于这些值的颜色。

对于您的情况,Mode.MULTIPLY可能效果最好。

请注意,波特-达夫模式仅定义为与预乘 alpha 一起正常工作。这意味着任何 R、G 或 B 分量都不能超过 alpha 值。

Android项目的GitHub项目,展示了所有的Porter-Duff模式。Android应用程序也可以在Playstore上使用。

经过一番研究,我得出了以下关于Android中PorterDuff颜色模式的结论,

  • Sa 和 Sc 是源 Alpha 和源颜色,例如,如果我将 ColorFilter 设置为可绘制对象,如 myDrawable.setColorFilter(desiredColor,Mode.SRC_ATOP),则 Sa 和 Sc 值将取自 desiredColor 而不是 myDrawable。Da 和 DC 将是 myDrawable 的原始 alpha 和颜色值。
  • 我有一个图像,我想用用户输入的 alpha 值应用某些颜色。我尝试使用PorterDuff模式,我原来的myDrawable是一个九个补丁的可绘制对象,它有透明的背景和三角形的角,就像消息气泡三角形一样。当我使用

    公共静态最终波特达夫模式 SRC [南非,南卡罗来纳州]

它应用源颜色和源 Alpha,我认为上面的 setColorFilter 方法所需的颜色和 Alpha 值,我得到了正确的颜色值,即颜色和 alpha 正确应用于新的可绘制对象,但该图像上的三角形被完全清洗/删除。所以我不得不使用ColorMatrixFilter和设置矩阵,并将alpha值分别设置为可绘制。

最新更新