首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓ColorFilter -波特-达夫模式

安卓ColorFilter -波特-达夫模式
EN

Stack Overflow用户
提问于 2012-04-20 19:50:35
回答 3查看 21.2K关注 0票数 14

我正在尝试解决android ColorFilters的一个问题。文档非常差,所以main方法是尝试不同的变体。

问题是:

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

所以,当我画一个圆的时候,我希望alpha=0的像素不被绘制,但是alpha=255的像素被绘制成我想要的颜色。Alpha通道不应该改变。

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

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

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

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

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

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

EN

回答 3

Stack Overflow用户

发布于 2012-04-20 20:02:13

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

对于您的情况,Mode.MULTIPLY可能工作得最好。

票数 10
EN

Stack Overflow用户

发布于 2012-04-22 15:31:27

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

安卓项目的GitHub project,它展示了所有的波特-达夫模式。Android App也可以在Playstore上买到。

票数 5
EN

Stack Overflow用户

发布于 2012-12-17 02:46:13

经过一些研究,我得出了以下关于安卓PorterDuff颜色模式的结论。

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

公共静态最终PorterDuff.Mode服务,Sc

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10245681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档