【发布时间】:2020-09-27 14:26:17
【问题描述】:
我想将图像上的hue 更改为specific color。我已经搜索了很多次,但一无所获。
目前我正在使用从 SO 获得的这段代码来更改图像色调。
public static class ColorFilterGenerator {
static ColorFilter adjustHue(float value)
{
ColorMatrix cm = new ColorMatrix();
adjustHues(cm, value);
return new ColorMatrixColorFilter(cm);
}
static void adjustHues(ColorMatrix cm, float value) {
value = cleanValue(value) / 180f * (float) Math.PI;
if (value != 0) {
float cosVal = (float) Math.cos(value);
float sinVal = (float) Math.sin(value);
float lumR = 0.213f;
float lumG = 0.715f;
float lumB = 0.072f;
float[] mat = new float[]
{
lumR + cosVal * (1 - lumR) + sinVal * (-lumR), lumG + cosVal * (-lumG) + sinVal * (-lumG), lumB + cosVal * (-lumB) + sinVal * (1 - lumB), 0, 0,
lumR + cosVal * (-lumR) + sinVal * (0.143f), lumG + cosVal * (1 - lumG) + sinVal * (0.140f), lumB + cosVal * (-lumB) + sinVal * (-0.283f), 0, 0,
lumR + cosVal * (-lumR) + sinVal * (-(1 - lumR)), lumG + cosVal * (-lumG) + sinVal * (lumG), lumB + cosVal * (1 - lumB) + sinVal * (lumB), 0, 0,
0f, 0f, 0f, 1f, 0f,
0f, 0f, 0f, 0f, 1f};
cm.postConcat(new ColorMatrix(mat));
}
}
static float cleanValue(float p_val)
{
return Math.min((float) 180.0, Math.max(-(float) 180.0, p_val));
}
}
但是这段代码在拖动搜索栏时会改变整个图像的色调。 有人可以告诉我如何针对特定颜色(例如仅红色)实现此目的吗? 谢谢。
【问题讨论】:
-
我没有从中得到答案
-
HSV/HSL is just another representation of color like RGB。当您说要更改特定颜色并且仅更改该颜色时,您会意识到您只要求修改任何图像阵列中选定像素的选定值。阅读the section on end-user software 并意识到当你说
red时,问题就变成了the set of values (shades) of red that need to be transformed。如果您的代码太慢,请查看:渲染脚本、OpenGL ES 着色器、JNI C/C++ 代码。 -
如果你给出一些代码示例我会更好理解。
标签: java android bitmap hsl colormatrix