全部,
在我注意到有多慢之后 getPixel
和 setPixel
是(不确定是哪一个,猜测两者都没有涡轮增压)我很快为 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();
}
}
最佳答案
像setPixel
/getPixel
这样简单的函数,函数调用开销比较大。
直接访问 pixels
数组比通过这些函数访问要快得多。当然,这意味着您必须将 pixels
公开,从设计的角度来看这不是很好,但是如果您绝对需要您可以获得的所有性能,那么这就是要走的路。
另见 Designing for performance在 Android 文档中。
如果这还不够,请考虑使用 NDK 在 C++ 中编写您的位图操作。 .
关于java - 提高 Android 位图上 getpixel() 和 setpixel() 的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4715840/