Java位图改变了色调

时间:2016-07-25 16:06:30

标签: java android bitmap

这是我的代码:

    public static Bitmap processing(Bitmap src, float hue) {
        int width = src.getWidth();
        int height = src.getHeight();
        Bitmap bitmap = Bitmap.createBitmap(width, height, src.getConfig());
        for(int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                int newPixel = hueChange(src.getPixel(x, y), hue);
                bitmap.setPixel(x, y, newPixel);
            }
        }
        return bitmap;
    }
    private static int hueChange(int startpixel, float hue) {
        float[] hsv = new float[3];       //array to store HSV values
        Color.colorToHSV(startpixel,hsv); //get original HSV values of pixel
        hsv[0]=hsv[0]+hue;                //add the shift to the HUE of HSV array
        hsv[0]=hsv[0]%360;                //confines hue to values:[0,360]
        return Color.HSVToColor(Color.alpha(startpixel),hsv);
    }

问题是:如果src位图大小为480x480,processing最多需要3300毫秒。这对我来说太长了。

最快的方法是什么?

完成!
最快的方法是将OpenCV与NDK一起使用。

1 个答案:

答案 0 :(得分:1)

这是最糟糕的方法。如果您曾想过使用setPixel- don。你可能错了。

正确的方式:

   Canvas canvas = new Canvas(bitmap);
   canvas.drawColor(color);