我正在尝试解决android ColorFilters
的问题。文档很差,所以主要方法是尝试不同的变体。
问题:
有一个位图。一些像素具有alpha = 255,其他像素具有alpha = 0。我正在尝试绘制一个具有特定颜色的圆圈。我想在位图中不改变alpha通道,但在绘图时我想将颜色乘以位图-α。
因此,在绘制圆形时,我希望不绘制alpha = 0的像素,但是alpha = 255的像素要绘制我想要的颜色。 Alpha通道不应该改变。
我正在尝试使用porter-duff ColorFilter(android sdk中的PorterDuffColorFilter类)。
官方网站上有太多模式和不可理解的说明:http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
我想我应该使用DST_ATOP
或SRC_ATOP
,但它们不能像我描述的那样工作。
此外,在porter-duff colorfilter的构造函数中有一个奇怪的参数srcColor
。
我无法理解公式[Da, Sc * Da + (1 - Sa) * Dc]
中“Sa”和“Sc”的含义。它可以来自传递给colorfilter构造函数的颜色,也可以通过“paint.setColor”进行颜色设置。
有人知道,它是如何运作的?
答案 0 :(得分:10)
Sa
和Sc
分别是“源alpha”和“源颜色”的短路。 srcColor
构造函数中的PorterDuffColorFilter
参数是用于这些值的颜色。
对于您的情况,Mode.MULTIPLY
可能效果最佳。
答案 1 :(得分:5)
请注意,Porter-Duff模式仅定义为与预乘alpha一起正常工作。这意味着R,G或B组件都不能超过alpha值。
GitHub project用于展示所有Porter-Duff模式的Android项目。 Playstore上也提供Android App。
答案 2 :(得分:1)
经过一番研究后,我得出了关于Android中PorterDuff Color模式的结论,
我有一个图像,我想要使用来自用户输入的alpha值应用某些颜色。我尝试使用PorterDuff模式,我的原始myDrawable是一个九个可绘制的补丁,它有透明的背景和trangular角落,如消息气泡三角形。我用的时候
public static final PorterDuff.Mode SRC [Sa,Sc]
应用了源颜色和源Alpha,我认为上面的setColorFilter方法desiredColor的颜色和Alpha值,我得到的颜色值正确,即颜色和alpha正确应用于新的Drawable,但该图像上的三角形被完全清洗/移除。 所以我不得不使用ColorMatrixFilter并设置矩阵并将alpha值分别设置为drawable。