在JavaAndroid中有没有更快的方法来处理数组?

在JavaAndroid中有没有更快的方法来处理数组?,java,android,performance,image,image-processing,Java,Android,Performance,Image,Image Processing,我有一个位图,我正在将每个像素加载到数组中。稍后,我运行每个阵列像素数据,检查颜色是否为红色,并将其更改为黑色。因此,如果它是1024x1024图像,我必须遍历长度为1048576的数组。有没有更快的处理方法。欢迎提供任何改进性能的建议。我基本上需要检查图像中的颜色并更改它。下面是我的代码示例 int[] allpixels = new int[myBitmap.getHeight() * myBitmap.getWidth()]; myBitmap.getPixels(allpixels,

我有一个位图,我正在将每个像素加载到数组中。稍后,我运行每个阵列像素数据,检查颜色是否为红色,并将其更改为黑色。因此,如果它是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());
int[]allpixels=new int[myBitmap.getHeight()*myBitmap.getWidth()];
myBitmap.getPixels(所有像素,0,myBitmap.getWidth(),0,0,
myBitmap.getWidth(),myBitmap.getHeight();
对于(int i=0;i
在for循环的比较语句中,您得到的是高度和宽度,并且每次都相乘。你可以缓存它。这可能会使您的性能有所提高,但除此之外,您的算法需要做大量的工作。你对此无能为力。正如上面评论中所建议的,您可以对其进行多线程处理,但不能保证您有多个内核/处理器。如果性能非常关键,如果您需要ICS,可以考虑使用ReordScript来执行它。有关更多详细信息,请参见此


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

听起来您可以在此处使用多个线程。听起来像是您的情况谢谢@Sergey Benner。这对我有用。