我正在阅读文件并尝试获取图像的宽度和高度。但是,每当我调用此行时,我都会收到异常
inImg.getRaster().getPixels(0,0,width,height,pixels);
我得到的例外是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 307200
at sun.awt.image.ByteInterleavedRaster.getPixels(ByteInterleavedRaster.java:1014)
at sobel_java.main(sobel_java.java:22)
我的代码是
public class Sobel {
public static void main(String[] args) throws IOException{
int i, j;
double Gx[][], Gy[][], G[][];
FileInputStream inFile = new FileInputStream("lena.bmp");
BufferedImage inImg = ImageIO.read(inFile);
int width = inImg.getWidth();
int height = inImg.getHeight();
int[] pixels = new int[width * height];
int[][] output = new int[width][height];
inImg.getRaster().getPixels(0,0,width,height,pixels);
}}
感谢您的帮助。
答案 0 :(得分:2)
getPixels()
方法将栅格的所有样本存储到输出数组中,每个像素不止一个。您可以使用getNumBands()
获取每个像素的样本数。增加输出数组的长度:
int numBands = inImg.getRaster().getNumBands();
int[] pixels = new int[width * height * numBands];