Java 如何在android中更改图像的色调、饱和度和亮度

Java 如何在android中更改图像的色调、饱和度和亮度,java,android,bitmap,hsl,colormatrix,Java,Android,Bitmap,Hsl,Colormatrix,我想更改图像上特定颜色的色调。我找了很多次,但什么也没找到。 目前我正在使用从SO获得的这段代码来更改图像色调 public static class ColorFilterGenerator { static ColorFilter adjustHue(float value) { ColorMatrix cm = new ColorMatrix(); adjustHues(cm, value); return new Col

我想更改图像上特定颜色的
色调。我找了很多次,但什么也没找到。
目前我正在使用从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));
    }
}
但此代码在拖动seekbar时会更改整个图像的色调。 有人能告诉我,我如何才能实现这一特定的颜色(如只有红色)? 谢谢。

你可以用。然后,您可以在中读取图像并转换为HSV,然后直接更改色调

Mat image_bgr = Imgcodecs.imread("image_path");
Mat image_hsv = image_bgr.clone();
Imgproc.cvtColor(image_bgr, image_hsv, Imgproc.COLOR_BGR2HSV);

double hue = ...
for (int row = 0; row < image_hsv.rows(); row++) {
    for (int col = 0; col < image_hsv.cols(); col++) {
        double[] pixel = image_hsv.get(row, col);
        pixel[0] += hue;
        image_hsv.put(row, col, pixel);
    }
}
Mat image_bgr=Imgcodecs.imread(“图像路径”);
Mat image_hsv=image_bgr.clone();
Imgproc.cvtColor(image\u bgr、image\hsv、Imgproc.COLOR\u BGR2HSV);
双色调=。。。
对于(int row=0;row
您能分享一些示例代码吗?或者不使用OpenCV也可以吗?如果可能的话,你能给我完整的演示代码吗。因为我完全是OpenCV的初学者,不知道如何在Android Java中使用它。你必须按照上面链接中的说明安装OpenCV for Android,然后这应该能够为图像添加色调。我不明白你想要什么样的演示。如果你在做很多图片的事情,我建议你使用OpenCV。相关:我没有从中得到答案。当你说你想改变一种特定的颜色,并且只改变那种颜色时,你意识到你只要求修改任何图像数组中选定像素的选定值。阅读并意识到,当你说红色时,问题变成了需要转换的红色值集(阴影)。如果您的代码太慢,请查看:Renderscript、OpenGL ES着色器、JNIC/C++代码。如果您给出一些代码示例,我会更好地理解。