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

标签 java android performance 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();
}
}

最佳答案

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

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

另见 Designing for performance在 Android 文档中。

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

关于java - 提高 Android 位图上 getpixel() 和 setpixel() 的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4715840/

相关文章:

java spring mvc json databind 自定义 json 响应

从 android 调用端点时出现 java.lang.VerifyError

performance - 为什么让 Haskell 变得懒惰会影响性能?

android - 在 Android 中以编程方式禁用屏幕 sleep ?

java - Android - 打开已经创建的 Activity

ruby - Ruby 中的网络爬虫 : How to achieve the best perfomance?

node.js - "Hello world"从 Chrome 而非 curl 测量时,Rust 网络服务器比 Node 慢

java - 在 second/之前删除字符串的一部分

java - 迭代同步包装器是否安全?

java - `Eclipse/Project/Clean...` 和 `Eclipse/Project/Refresh (F5)` 之间有什么区别?