2012-10-03 60 views
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; 
} 

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

谢谢! :)

+1

相关:http://stackoverflow.com/q/4354939/321697 :) – kcoppock

回答

2

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

相关问题