14

我正在尝试解决 android 的问题ColorFilters。文档很差,所以主要方法是尝试不同的变体。

问题:

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

因此,在绘制圆圈时,我希望不绘制 alpha=0 的像素,但要以我想要的颜色绘制 alpha=255 的像素。Alpha 通道不应该改变。

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

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

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

另外,porter-duff colorfilter 的构造函数中有一个奇怪的参数srcColor

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

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

4

3 回答 3

10

Sa并且Sc分别是“source alpha”和“source color”的缩写。构造函数中的srcColor参数PorterDuffColorFilter是用于这些值的颜色。

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

于 2012-04-20T12:02:12.917 回答
5

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

用于展示所有 Porter-Duff 模式的 Android 项目的GitHub 项目Android 应用程序也可在 Playstore 上找到。

于 2012-04-22T07:31:27.377 回答
1

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

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

    公共静态最终 PorterDuff.Mode SRC [Sa, Sc]

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

于 2012-12-16T18:46:13.070 回答