所有,

在我注意到getPixelsetPixel的运行速度很慢之后(不确定哪一个,猜猜这两个都没有涡轮增压),我 swift 为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,从设计的 Angular 来看这不是很好,但是如果您绝对需要可以获得的所有性能,那么这就是方法。

另请参阅Android文档中的Designing for performance

如果这还不够,请考虑使用NDK在C++中对位图操作进行编码。

08-05 14:10