0

我需要一种方法来调整位图的色调/饱和度。到目前为止,我发现了这个

public static Bitmap colorize(Bitmap src, float hue, float saturationDelta, float valueDelta) {

    Bitmap b = src.copy(Bitmap.Config.ARGB_8888, true);

    for (int x = 0; x < b.getWidth(); x++) {
        for (int y = 0; y < b.getHeight(); y++) {
            int color = b.getPixel(x, y);
            float[] hsv = new float[3];
            Color.colorToHSV(color, hsv);
            hsv[0] = hue;
            hsv[1] += saturationDelta;
            hsv[2] += valueDelta;
            int newColor = Color.HSVToColor(Color.alpha(color), hsv);
            b.setPixel(x, y, newColor);
        }
    }

    return b;
}

但处理 400x500 位图需要 10 秒。有没有更快的方法?

谢谢!:)

4

1 回答 1

2

我在上面发布的链接应该有助于调整色调。一般来说,上述代码如此缓慢的原因是因为您正在调用图像getPixel()setPixel()的每个像素。您应该使用getPixels()andsetPixels()方法将所有像素作为一个数组获取,循环遍历该数组并进行修改,然后将修改后的数组一次全部设置回位图。您会注意到速度的巨大提升。

于 2012-10-03T15:36:51.207 回答