1

我有一个图像作为一维字节数组,我需要遍历它以执行过滤操作。这就是我现在这样做的方式:

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;
    }
}

上面的代码执行一个基本的平均功能。我也使用循环来执行其他过滤功能。不过速度不是很快。我能做些什么来更快地遍历图像数组?

4

0 回答 0