我正在尝试解决安卓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_ATOP
或SRC_ATOP
,但它们不像我描述的那样工作。
此外,波特-达夫颜色过滤器的构造函数中还有一个奇怪的参数srcColor
。
我不明白公式中的"Sa"和"Sc"是什么意思[Da, Sc * Da + (1 - Sa) * Dc]
.它可以来自传递给colorfilter构造函数的颜色,也可以由"paint.setColor"设置颜色。
有人知道,它是如何工作的吗?
Sa
和Sc
分别是"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值分别设置为可绘制。