问题标签 [colorfilter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
60300 浏览

android - 了解使用 ColorMatrix 和 ColorMatrixColorFilter 修改 Drawable 的色调

我正在开发应用程序的 UI,我正在尝试使用灰度图标,并允许用户将主题更改为他们选择的颜色。为此,我试图仅应用某种 ColorFilter 来在可绘制对象的顶部覆盖颜色。我试过使用 PorterDuff.Mode.MULTIPLY,它几乎完全符合我的需要,除了白色也会被颜色覆盖。我理想中寻找的是类似于 Photoshop 中的“颜色”混合模式,其中图形保留其透明度和亮度,并且只修改图像的颜色。例如:

替代文字变成替代文字

在做了一些研究之后,似乎 ColorMatrixColorFilter 类可以满足我的需要,但我似乎找不到任何指向如何使用矩阵的资源。这是一个 4x5 矩阵,但我需要知道的是如何设计矩阵。有任何想法吗?

编辑:好吧,到目前为止我发现的内容如下:

该矩阵是单位矩阵(应用时不做任何更改),数字范围从 0 到 1(浮点数)。该矩阵将与每个像素相乘以转换为新颜色。所以这就是我开始变得模糊的地方。所以我认为每个像素都是一个 1 x 4 的向量,其中包含 argb 值(例如0.2, 0.5, 0.8, 1),这些值将点缀着变换矩阵。因此,要将图像的红色强度加倍,您可以使用如下矩阵:

这会给你一个向量(颜色)0.4, 0.5, 0.8, 1。从有限的测试来看,这似乎是这种情况,并且工作正常,但我实际上仍然遇到了同样的问题(即白人获得着色)。进一步阅读告诉我,这是因为它正在对 RGB 值进行转换,而对于色相偏移,应首先将值转换为 HSL 值。所以可能我可以编写一个类来读取图像并转换颜色,然后用新颜色重新绘制图像。这给 StateListDrawables 带来了另一个问题,因为我不确定如何在代码中获取这些内容并修改所有这些内容,以及它的处理速度有多慢。:/

嗯,好吧,所以我想我会遇到的另一个问题是,是否可以使用矩阵将 RGB 转换为具有亮度信息的另一个颜色空间,例如 L a b 或 HSL?如果是这样,我可以只乘以该转换的矩阵,然后对该矩阵进行色调调整,然后将该矩阵应用为 ColorFilter。

0 投票
2 回答
1609 浏览

android - 创建 ColorFilter 的自定义子类?

好的,所以这与我之前关于 ColorMatrixColorFilter 的问题有些相关,但我觉得这是一个截然不同的问题。我想知道是否有办法——或者更确切地说,如何扩展 ColorFilter 类来创建我自己的自定义颜色过滤器。对于我需要完成的工作,我需要编写一个自定义过滤器来查询每个像素,将其 RGB 值转换为 HSL 或 LAB,修改色调,将其转换回 RGB,并将该像素设置为新值。

我想我可以简单地编写一个执行此操作的类,接受一个 Drawable 和一定量的色调变化来执行,但是必须为每个 Drawable 以及每个 Drawable 的每个状态手动调用它,而ColorFilter 似乎可以很好地处理这个问题。鉴于 LightingColorFilter 和 ColorMatrixColorFilter 的存在,它似乎可以被子类化,但到目前为止,我寻找任何类型的文档的努力都是徒劳的。我似乎找不到这三个(Lighting、ColorMatrix、ColorFilter)中任何一个的源代码;我在想他们可能是用本机代码完成的?

我的问题是:我怎样才能正确地继承 ColorFilter?如果我找不到一个好的答案,如果有人能够找到源(我已经搜索了 Android 的 git)并发布了一个链接,那也会很有帮助。

谢谢!

0 投票
0 回答
3184 浏览

android - Android 按钮 setColorFilter 行为

我的应用程序上有 4 个按钮,当用户单击某个按钮时,我会更改该按钮的颜色。

单击按钮 3 时,我想将他的颜色更改为绿色,否则我想删除他的绿色滤镜(单击按钮 1/2/4 时)。如果我点击按钮 3 它确实得到绿色过滤器。如果然后我单击按钮 4,它会删除绿色过滤器,但如果我单击按钮 1 或 2,则不会发生任何事情。当我在 XML 中切换按钮的位置并将 button3 放在首位时,它不会发生,想法?

10 倍 :)

布局xml的相关部分是:

相关代码是:

0 投票
2 回答
1398 浏览

android - 应用 Colorfilter 后滚动时 Ninepatch 缩放错误?

今天我试图让我的列表视图更有活力。所以我创建了一个白色的 Ninepatch 图像并使用 .setColorFilter 方法添加了一个颜色过滤器。那不是问题。但是在应用这个之后,每次我滚动图像时(随机)缩放错误,所以可以说我的项目是 100dp 高,带有一些文本。滚动后,项目仍然是 100dp 高,所有文本都显示,但背景中的图像现在只使用 50dp。

这是我的代码:

这里我如何设置滤色器:

在这里我如何将它添加到我的适配器中

我希望有人能帮助我。因为这个错误让我很烦;(

0 投票
5 回答
9765 浏览

java - StateListDrawable 切换颜色过滤器

我想创建自定义按钮以在 TabHost 中使用。我一直在尝试只使用相同的图像资源(png),但颜色过滤器会根据状态而变化。所以我做了这个位作为自定义按钮的布局:

在我的活动中,我添加了这样的选项卡:

这是“buildTab”方法:

在选中状态下,图像应该是完全绿色(0x0000FF00),在非选中状态下,应该是蓝色(0x000000FF)。

问题是滤色器似乎被完全忽略了。在任何情况下我都看不到颜色的变化。

我还尝试通过在 上设置android:tint属性来获得相同的结果<ImageView/>,但显然你不能在<selector>那里使用对 a 的引用,因为它会抛出NumberFormatException.

我没有看到我做错了什么,所以任何帮助将不胜感激。

0 投票
3 回答
42285 浏览

android - How can I manipulate the camera preview?

There are several tutorials out there which explain how to get a simple camera preview up and running on an android device. But i couldn't find any example which explains how to manipulate the image before it's being rendered.
What I want to do is implementing custom color filters to simulate e.g. red and/or green deficiency.

0 投票
1 回答
14912 浏览

android - Android 颜色叠加 - PorterDuff 模式

我有一个可绘制的黑白 Ninepatch 作为视图的背景,我想在它上面应用一种颜色,就像一个半透明的叠加层,它使绘图可见但在其上应用所需的颜色。

我认为drawable.setColorFilter(color,mode)可能会成功,但我无法弄清楚不同模式的含义。

谁能给我一个提示?

0 投票
0 回答
332 浏览

android - Android:将 ColorMatrixColorFilter 应用于 Paint 对象的异常,但仅适用于某些位图

我是 Android 编程的初学者,但我花了很多时间来确定这一点,所以希望有人知道发生了什么。我的应用程序有一堆 Thing 对象,每个对象都有一个位图,每个对象都会以某种方式更改位图(更改颜色、大小等)。这一切都适用于我在 MS Paint 中制作的一些“测试”位图(保存为 .png 文件)。然而,当我用 GIMP 制作的更好的图片替换它们时,应用程序开始崩溃。

最终我发现只有在 .png 图像被保存并在 GIMP 中选中“保存背景颜色”时,该应用程序才会崩溃。我需要这个,因为其中一些图片需要部分透明,以便可以叠加。然而:疯狂的是,当我尝试覆盖或创建图像时它不会崩溃,当我将 ColorMatrixColorFilter 应用于 Paint 对象时它会崩溃。

我不明白这怎么可能。将 Paint 对象实际应用到任何东西都远远不够,那么为什么一个图像文件可以工作,而另一个不能呢?崩溃是 ActivityThread.performLauncActivity 中的 RuntimeException,我无法找到更多关于它的信息。

这是我正在做什么以及它在哪里崩溃的一些伪代码。

问题:1)为什么会崩溃?2)如果我想加载透明图像并应用颜色过滤器,将它们相互叠加以创建新的位图等,我应该做些什么不同的事情?只要我的所有图像都没有背景,所有这些都可以正常工作。

编辑1:这是跟踪,以防有帮助:DalvikVM[localhost:8611]
Thread [<1> main] (Suspended (exception RuntimeException))
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) 行:2663
ActivityThread.handleLaunchActivity(ActivityThread $ActivityRecord, Intent) line: 2679
ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 125 ActivityThread$H.handleMessage(Message) line: 2033
ActivityThread$H(Handler).dispatchMessage(Message) line: 99 Looper .loop() line: 123 ActivityThread.main(String[]) line: 4627
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: 不可用 [native method]
Method.invoke(Object, Object...) 行:521
ZygoteInit$MethodAndArgsCaller.run() 行:868
ZygoteInit.main(String[]) 行:626 NativeStart.main(String[]) 行:不可用 [本机方法]

编辑 2:这是使用 2.2 目标(特别是在 VirtualBox 中运行的 android-x86-2.2-eeepc)发生的。当针对 3.2 目标运行时,其他地方的位图处理似乎仍然存在一些问题,但它不再抛出 RuntimeException。所以看起来这可能只是一个错误。

0 投票
4 回答
84498 浏览

android - 使用 ShapedDrawable 将 ColorFilter 应用于 ImageView

我有一个ImageViewwithandroid:src设置为 a ShapedDrawable,即一个白色圆圈。我想要的是ImageView在运行时对它进行着色以响应某些事件。imgView.setColorFilter似乎是解决方案,但是在使用这个(尝试了不同的参数)之后,图像变得不可见(我在屏幕上看不到它)。

如何解决这个问题?有没有更好的方法来制作色环?

0 投票
3 回答
21331 浏览

android - Android ColorFilter - Porter-Duff 模式

我正在尝试解决 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”设置颜色。

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