提高Android Bitmap上getpixel()和setpixel()的速度

Pio*_*otr 7 java performance android bitmap

所有,

之后,我注意到有缓慢getPixelsetPixel有(不知道哪一个,都猜不涡轮增压)我赶紧编码的容器Bitmap,使用int[]阵列来处理位图操作.

已经 - 它明显更快,但这还不够.请问您如何进一步加快速度?

我的想法是跟踪setPixel函数"脏"的内容并仅更新调用Bitmap时的这一部分getBitmap()......不清楚如何设置setPixels参数(我猜测偏移和步幅的东西).

还 - 任何更快的食谱?

感谢您提前帮助!

import android.graphics.Bitmap;

public class DrawableBitmapContainer {
private Bitmap image;
private int width, height;
private int[]  pixels;
public DrawableBitmapContainer(Bitmap _source ){
    image = _source;
    width = image.getWidth();
    height = image.getHeight();
    pixels = new int[width*height];
    image.getPixels(pixels,0,width,0,0,width,height);
}
public int getPixel(int x,int y){
    return pixels[x+y*width];
}
public void setPixel(int x,int y, int color){
    pixels[x+y*width]=color;
}
public Bitmap getBimap(){
    image.setPixels(pixels,0,width,0,0,width,height);
    return image;
}
public int getWidth(){
    return image.getWidth();
}
public int getHeight(){
    return image.getHeight();
}
}
Run Code Online (Sandbox Code Playgroud)

svd*_*ree 5

对于像setPixel/这样简单getPixel的函数,函数调用开销比较大。

pixels直接访问数组而不是通过这些函数会快得多。当然,这意味着你必须pixels公开,从设计的角度来看这不是很好,但如果你绝对需要你可以获得的所有性能,这是要走的路。

另请参阅Android 文档中的性能设计

如果这还不够,请考虑使用NDK用 C++ 编写位图操作。