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

时间:2012-01-20 00:23:48

标签: 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());

1 个答案:

答案 0 :(得分:1)

在for循环的比较语句中,您每次都会获得高度和宽度并相乘。你可以缓存它。这应该可以让你获得一点性能提升,但除此之外,你的算法需要做很多工作。你可以做的不是很多。正如上面的评论中所建议的,可以多线程,但不能保证您有多个核心/处理器。如果性能至关重要,您可以考虑使用RenderScript来执行此操作,如果您需要ICS。有关详细信息,请参阅此post on image processing

实际上,您可能尝试的另一种方法是使用setColorFilter。可能需要两个应用程序才能获得具有原始颜色的蒙版,然后使用新颜色重新应用蒙版。