问题标签 [colormatrix]

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 投票
2 回答
2041 浏览

android - 如何在 Android 中将具有黑色像素的位图转换为另一种颜色?

我有一个带有一些透明像素的位图,其余部分主要是黑色(一些黑色像素可能有一些半透明像素)。

我需要重新使用这些位图,并希望能够在运行时从这个位图中创建一个遮罩,然后尝试与另一种颜色(如红色、绿色等)的块混合,以便最终结果相同图像但具有红色(并且那些半透明黑色像素变成半透明红色像素的像素)。

我尝试了各种颜色过滤器和 xfermodes,但无法弄清楚。请帮忙!

0 投票
0 回答
1969 浏览

android - 使用 ColorMatrix 和 ColorMatrixColorFilter 更改位图颜色导致 Android 中出现奇怪的结果

我使用此方法从资源中获取位图,并在从 SurfaceView 扩展的类中使用 Canvas.drawBitmap 绘制它:

该位图显示自身没有任何问题。但是当我想用下面的方法改变它的颜色并绘制这个新的位图时,它总是会丢失整个图像的某些部分。

我尝试了很多来自网络的搜索结果,但仍然不知道为什么。我认为问题也可能来自另一个来源:资源位图本身。它是一个 32 位的 png 文件,大小为 65*161,大小为 1.59KB,不是很大。所以我得到另一个png并用相同的方法绘制,没有任何问题!所以这里也给出了这两个png的链接,供大家找出问题的症结所在。感谢战利品!

================导致问题的png VS没有问题的png =============

0 投票
1 回答
1037 浏览

android - 使用 ColorMatrixColorFilter 时画布不绘制位图

我在使用 ColorMatrixColorFilter 修改位图中的颜色像素时遇到了困难。如果我使用本地文件系统中的位图(jpg),它可以工作。但是,如果我使用从缓冲区创建的位图,则画布上不会绘制任何内容。

特别是,我使用以下代码来创建 ColorMatrix:

以上用于创建用于交换红色和蓝色的 ColorMatrixColorFilter。

如果我使用以下代码创建位图,它可以工作:

如果我使用以下代码创建位图,则不会在画布上绘制任何内容:

我的 onDraw() 如下所示:

如果我不设置颜色过滤器,位图会在我的画布上呈现。如果我设置了颜色过滤器,它只是一个黑屏 - 没有任何东西可以渲染。如果我使用 jpg 位图而不是我通过缓冲区创建的位图,它会用红色/蓝色交换来绘制。

我将矩阵更改为与单位矩阵相同,并且正确渲染了位图。如果我更改矩阵中的任何单个浮点数(如 1s 到 .5s 或 0),则不会绘制任何内容。

我还检查了确保位图有足够的“字节”来表示位图。bitmap.byteCount() == srcBuffer.limit() 是真的 - 所以我缓冲区中的字节与我传入的宽度/高度应该存在的字节相同。

我在 onDraw 期间对任何异常进行了尝试/捕获,并通过 logcat 输出倾倒,但在那里没有看到任何东西。我在 Android 位图绘制代码中翻了一下,看到了以下内容:

我无法追踪核心中的 C++ 代码,所以我无法判断这是否正在触发。但我确实知道我的位图的宽度和高度都不为零(它们是 800 和 600),并且我知道我的位图在创建时设置为 ARGV_8888 类型,并且完全相同的绘制对象用于加载的 jpg从磁盘(有效的那个)和我使用 copyPixelsFromBuffer() 创建的那个。

所以我不确定我做错了什么。我认为它是位图中的某些标志或属性与 colorFiltering 不兼容,但它只是 ARGB_8888 类型的适当大小的简单 ByteBuffer。当然,完全相同的代码(绘制对象等)用于设置过滤器。

那么我还需要对位图做些什么吗?使用 ColorMatrix/Filter?

0 投票
1 回答
1075 浏览

svg - 将两个 SVG feColorMatrix 滤镜效果合并为一个矩阵?

我正在使用 SVG 过滤器在一些复杂的路径上创建模糊的“阴影”类型效果。

feColorMatrix我纯粹通过反复试验得出了上述值。(如果我单独使用矩阵数学,我永远不会想出一种从暗到亮的特别美丽的色调变化。)基本上,我将色轮旋转 340 度,然后我正在饱和颜色使用值 3,就在模糊之前。(过去的规范对此有些不清楚,但反复试验表明,大于 1 的type="saturate"值会使图像饱和,小于 1 的值会使图像去饱和。)

这就是问题所在:我正在迭代大量路径,双矩阵运算使我的机器停止运行。它经常崩溃。

一些矩阵数学大师可以帮我计算出将上面的两个 feColorMatrix 过滤器组合成一个更有效feColorMatrix的 type="matrix" 过滤器原语的数字吗?我得到了规范的要点,但我在数学方面有点不知所措。

0 投票
2 回答
1606 浏览

android - 在 Imageview 上合并两个 ColorMatrix 或同时应用两个或多个 ColorMatrix

我正在更改 ImageView 的亮度、对比度、饱和度和色调。我已经搜索了很多。

我得到了一些适用于ColorMatrix 的代码。

[1.]对于Brightness ColorMatrix 有点像

哪个工作正常。

[2.]对于对比度ColorMatrix 是不同的东西,它也可以正常工作。

但是,所有这些 ColorMatrix 都是单独工作的。意味着最后应用的 ColorMatrix 的效果只是 ImageView 上的场景,因为它确实做到了,这消除了之前应用的ColorMatrix 的效果,并且设置最后应用了 ColorMatrix。

现在我想同时合并或混合所有颜色矩阵。表示要对 Brightnrs/Saturation/Hue 的 ColorMatrix 的效果应用对比度的 ColorMatrix。

0 投票
1 回答
593 浏览

image-processing - C++/CLI:用于应用 Alpha 阈值的 ColorMatrix

有谁知道如何指定 ColorMatrix(特别是 C++/CLI 中的 System::Drawing::Imaging::ColorMatrix)来设置 alpha 阈值?例如,如果我使用 10 (10/255) 作为阈值,那么任何 RGBA Alpha 为 10 或更低的像素都将具有 0.0f Alpha,并且上面的每个像素都会得到 1.0f。

我正在尝试在 2D 场景编辑器中实现 ColorID 拾取,因为我厌倦了使用当前笨拙的方法来反转我的绘图转换来确定鼠标指向给定位图的哪个像素。所以我想做的是像这里描述的那样在 OpenGL 中进行 ColorID 渲染传递http://content.gpwiki.org/index.php/OpenGL_Selection_Using_Unique_Color_IDs但是我不能像大多数人一样只比较屏幕上位图的位置包括大量我不想被鼠标拾取的空白空间,这让我不得不选择颜色。

现在我的 ColorMatrix 看起来像

遵循 Hans 对 GDI+ 的回答:将所有像素设置为给定颜色,同时保留现有的 alpha 值,但我希望它也将阈值应用于 Alpha 组件(假设甚至可以使用 ColorMatrix)

0 投票
2 回答
6530 浏览

android - 如何更改位图的颜色并保留位图中的阴影?

我正在一个android项目中工作,我必须改变墙壁的颜色。例如,如果我拍摄有角落的墙壁的照片并选择一些颜色,比如蓝色。墙壁的颜色应该以这样的方式变化,使墙壁看起来好像是用这种颜色粉刷的。我的意思是说改变颜色后应该保留墙角的阴影。墙不应该看起来像画成扁平的矩形。

请让我知道如何做到这一点。

提前致谢。问候

0 投票
1 回答
1340 浏览

android - ColorMatrixColorFilter 不影响小于 255 的 alpha 值

我有一个采用位图和颜色的方法,并将位图上的所有像素转换为该颜色,同时保持原始的 alpha 值。此外,该方法被编写为随着传入的颜色变暗,Bitmap 变得更透明而不是更暗。如果传入的颜色是完全黑色的,那么位图应该完全透明而不是黑色。

}

使位图透明存在问题。

如果我将颜色矩阵设置为如下所示,

整个位图应该完全透明。但是,这只有在原始位图根本没有透明度时才能正常工作。如果位图的所有像素只有 255 的 alpha 值,则结果是完全透明的。但是,如果位图有任何 alpha 值小于 255 的像素,则最终图像将不是透明的,但将具有与原始图像相同的 alpha 值。

谁能告诉我为什么?

提前致谢。

0 投票
0 回答
767 浏览

java - Android 图像处理 - 应用过滤器

我正在尝试将图像过滤器应用于 Android 中的位图。我所有的滤镜都存储在 Photoshop 曲线 (.crv) 文件中,但这并不重要。

根据https://raw.github.com/WeemoApps/filteriser/master/iOS/filteriser/filteriser/UIImage+Filterise.m(Objective-C 代码),可以使用拉格朗日多项式因子对我的图像“按像素”进行着色:

在 Java 上的 Android 中做同样的事情并不难,但它太慢了。我正在寻找快速的东西(也许ColorMatrix像下面的代码一样工作)。

感谢帮助。

0 投票
2 回答
735 浏览

c# - 使用 C# 矩阵的颜色单元格

我需要创建一个 40x40 矩阵并手动为每个单元格着色,如下所示。

颜色矩阵

我认为我可以在表单应用程序上使用 40*40=160 个标签并一一着色,但这不是很有效。对此的最佳做法是什么。也许颜色矩阵?