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()およびsetPixels()メソッドを使用して、すべてのピクセルを配列として取得し、その配列をループして変更を行い、変更した配列を一度にビットマップに戻す必要があります。大幅な速度の向上に気付くでしょう。

于 2012-10-03T15:36:51.207 に答える