Java 如何在android中高效地遍历包含二维图像数据的一维数组?

Java 如何在android中高效地遍历包含二维图像数据的一维数组?,java,android,performance,image-processing,Java,Android,Performance,Image Processing,我有一个1-d字节数组的图像,我需要遍历它来执行过滤操作。我现在就是这样做的: final int height = image.height(), width = image.width(); byte[] imageArray = new byte[image.numberOfPixels() * image.numberOfChannels()]; image.getAsByteArray(imageArray); byte[] resultArray = new byte[image

我有一个1-d字节数组的图像,我需要遍历它来执行过滤操作。我现在就是这样做的:

final int height = image.height(), width = image.width();

byte[] imageArray = new byte[image.numberOfPixels() * image.numberOfChannels()];
image.getAsByteArray(imageArray);

byte[] resultArray = new byte[image.numberOfPixels() * image.numberOfChannels()];

for (int i = 0; i < height; i++) {
    int rowIndex = width * i;
    for (int j = 0; j < width; j++) {
        int columnIndex = rowIndex + j;     // current index
        int upperRow = columnIndex - width; // go back a row 
        int lowerRow = columnIndex + width/ // go forward a row

        int sum = imageArray[upperRow-1]  + imageArray[upperRow]  + imageArray[upperRow+1] +
                  imageArray[columnIndex-1] + imageArray[columnIndex] + imageArray[columnIndex+1] +
                  imageArray[lowerRow-1]  + imageArray[lowerRow]  + imageArray[lowerRow+1];

        int average = sum / 9;
        resultArray[columnIndex] = (byte) average;
    }
}
final int height=image.height(),width=image.width();
byte[]imageArray=新字节[image.numberOfPixels()*image.numberOfChannel()];
getAsByteArray(imageArray);
byte[]resultArray=新字节[image.numberOfPixels()*image.numberOfChannels()];
对于(int i=0;i

上述代码执行基本平均功能。我还使用循环执行其他过滤功能。但是速度不是很快。我该怎么做才能更快地遍历图像数组?

是否应该将平均值写入另一个数组?在完成整体平滑之前,您正在覆盖原始图像-这可能会产生错误的结果。。根据图像的大小,你也许可以将你的算法并行化?也许你也可以做些什么来避免你现在的缓存溢出量——我不是专家,但在我看来,你似乎在每次迭代中都有缓存溢出。@AleksanderFular——你完全正确。我是凭记忆写这段代码的,在发布之前并没有真正检查。我会改变它。你应该在这里展示你的真实代码-也许有人会告诉你你可以用其他方式做什么。。我建议你找一些讨论类似问题的论文,例如——这篇论文中的第一篇谷歌搜索结果“框模糊”可能是