java - 有没有更快的方法来处理 java android 中的数组?

标签 java android performance image image-processing

我有一个位图,我正在将每个像素加载到数组中。后来我遍历每个阵列像素数据并检查颜色是否为红色并将其更改为黑色。所以如果它是一个 1024x1024 的图像,我必须经过一个 1048576 长度的数组。有没有更快的方法来处理这个。欢迎任何提高性能的建议。我基本上需要检查图像中的颜色并进行更改。下面是我的代码示例。

int[] allpixels = new int[myBitmap.getHeight() * myBitmap.getWidth()];

myBitmap.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0,
                   myBitmap.getWidth(), myBitmap.getHeight());

for (int i = 0; i < myBitmap.getHeight() * myBitmap.getWidth(); i++) {
    if (allpixels[i] == fromColor) {
        allpixels[i] = toColor;
    }
}
Bitmap bitmapCopy = myBitmap.copy(myBitmap.getConfig(), true); 
bitmapCopy.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0,
                     myBitmap.getWidth(), myBitmap.getHeight());

最佳答案

在 for 循环的比较语句中,您每次都获得高度和宽度并相乘。你可以缓存它。这可能会给你带来一些性能提升,但除此之外,你的算法需要做很多工作。你无能为力。正如上面评论中所建议的,您可以对其进行多线程处理,但不能保证您拥有多个内核/处理器。如果性能如此关键,如果您需要 ICS,您可以考虑使用 RenderScript 来完成它。看这个post on image processing了解更多详情。

实际上,您可以尝试的另一种方法是使用 setColorFilter .可能需要两次应用才能获得具有原始颜色的面膜,然后重新应用具有新颜色的面膜。

关于java - 有没有更快的方法来处理 java android 中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8935308/

相关文章:

java - Spring/Hibernate CRUD 不工作(MySQL)

与启动画面和 webview 一起使用时,Android 进度条不起作用

android - 如何在 Android : Xamarin Forms 中更改选项卡式页面标题的选定和未选定颜色

java - 如何在没有 WSConnection 的情况下设置客户端信息

java - 将控制从 JFrame 转移回调用类

Android:在 SurfaceView 上完成所有绘图;确保我的绘图符合任何屏幕尺寸的正确方法是什么?

javascript - 如何检查脚本依赖性?

android - 如何有效地更新 Android textviews?

.net - 有没有人运行性能基准比较 LINQ

java - 放置在相对布局中时不出现 Admob 横幅