如何使用ColorMatrix为图像的每个像素设置相同(恒定)的色调值?

我正在尝试使用ColorMatrix为整个图像设置一个恒定的色调值。我的目标是使整个图像看起来具有相同的颜色,而不会失去任何区域的亮度。我找到了一种通过使用ColorMatrix来移动图像的色调值的方法,但我找不到任何方法来为所有像素设置相同的色调值。我可以通过迭代图像的每个像素来做到这一点,但这种方法太慢了。我不确定是否可以使用ColorMatrix进行此操作,并且我对除ColorMatrix方法之外的可能解决方案持开放态度。 输入图像 色调变换输出图像* 期望的输出图像** *这可以用彩色矩阵完成 **我可以通过迭代像素来实现这一点,但不能使用ColorMatrix PS:我试图在Android上做这个,但我相信这个问题与android没有直接关系,因为ColorMatrix方法在Flash,C#等其他平台上很常见。     
已邀请:
在这里不太熟悉,但我相信这个链接可以帮助: http://www.graficaobscura.com/matrix/index.html 它是c代码,所以你必须翻译C - > ColorMatrix,但在最后一段中有操作
Hue Rotation While Preserving Luminance
这似乎是你要找的。     
查看QColorMatrix,它有一个名为
RotateHue
的ColorMatrix例程。 Source是使用C ++编写的,但是可以移植到其他语言中(过去我将其中的部分内容移植到了.NET中并且工作得非常好)。     
我不认为有一种方法可以完全满足您对ColorMatrix的要求。听起来你想做的是从RGB转换到HSL色彩空间,在所有像素上设置H常数,并从HSL转换回RGB。这些颜色空间变换不是线性的,不能用矩阵表示。由于这些空间以不同的方式参数化颜色,我还怀疑RGB-> HSL-> RGB会发生一些降级。 我认为使用ColorMatrix可以实现的最接近的方法是使用一个转换为灰度,另一个用于对RGB值进行加权(对它们进行着色)。这种东西经常被用来制作假棕褐色调的照片,但它不是你要求的。     
我在Flash中做了一个快速示例(此问题标记为ActionScript),不确定这是否是您要查找的内容: http://megaswf.com/serve/1047061 代码:
import com.greensock.*; 
import com.greensock.easing.*;
import flash.events.MouseEvent;

colorButton.addEventListener(MouseEvent.CLICK, onColor);
resetButton.addEventListener(MouseEvent.CLICK, onReset);

function onColor(e:MouseEvent):void {
    TweenMax.to(mc, 1, {colorMatrixFilter:{colorize:0x0099ff, amount:1}});
}

function onReset(e:MouseEvent):void {
    TweenMax.to(mc, 1, {colorMatrixFilter:{colorize:0x0099ff, amount:0}});
}
    
这里有一个快速的方法,如果你想设置色调,比方说,h(0.5,0.2,0.3)。
var matrix:Array = new Array();
matrix = matrix.concat([.5, .5, .5, 0, 0]);
matrix = matrix.concat([.2, .2, .2, 0, 0]);
matrix = matrix.concat([.3, .3, .3, 0, 0]);
matrix = matrix.concat([0, 0, 0, 1, 0]);
var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix);

image.filters = [filter];
我不确定它会完全尊重亮度,但它可能满足您的需求!     

要回复问题请先登录注册