Java 提高Android位图上getpixel()和setpixel()的速度

Java 提高Android位图上getpixel()和setpixel()的速度,java,android,performance,bitmap,Java,Android,Performance,Bitmap,全部, 在我注意到getPixel和setPixel的速度有多慢(不确定是哪一个,我猜这两个都不是涡轮增压的)之后,我快速为Bitmap编写了一个容器,它使用int[]数组来处理位图操作 已经——速度明显加快,但这还不够。请你告诉我如何进一步加快速度好吗 我的想法是跟踪setPixel函数“脏”的内容,并在调用getBitmap()时只更新Bitmap的这一部分。。。不清楚如何设置setPixels参数(我想是偏移量和步幅) 还有-有更快的食谱吗 提前谢谢大家的帮助 import android

全部,

在我注意到
getPixel
setPixel
的速度有多慢(不确定是哪一个,我猜这两个都不是涡轮增压的)之后,我快速为
Bitmap
编写了一个容器,它使用
int[]
数组来处理位图操作

已经——速度明显加快,但这还不够。请你告诉我如何进一步加快速度好吗

我的想法是跟踪
setPixel
函数“脏”的内容,并在调用
getBitmap()
时只更新
Bitmap
的这一部分。。。不清楚如何设置
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
这样简单的函数,函数调用开销相对较大

直接访问
像素
数组比通过这些函数访问要快得多。当然,这意味着您必须将
像素
公开,从设计的角度来看,这不是很好,但是如果您绝对需要能够获得的所有性能,这是一种方法

请参见Android文档中的内容


如果还不够,考虑使用../p>

在C++中编码位图操作。另一种选择是使用Android NDK。说到这一点,您几乎没有什么帮助,但它确实提高了速度

我希望您意识到位图占用了2倍的内存,而且setpixel无法工作。此数组只是实际位图中图像矩阵的副本。因此,通过更改其中的值,它们不会被持久化,直到您将缓冲区提交回位图对象但是我听不懂你的评论,setpixel不起作用-如果我通过getBitmap方法访问位图,它就起作用,这正是我想要的。当然,如果你必须在较大的位图上转换每个像素,你可以用内存占用换取性能。谢谢-有办法定义“宏”吗这将允许我使用getPixel(x,y)