我有一个图像作为一维字节数组,我需要遍历它以执行过滤操作。这就是我现在这样做的方式:
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;
}
}
上面的代码执行一个基本的平均功能。我也使用循环来执行其他过滤功能。不过速度不是很快。我能做些什么来更快地遍历图像数组?