数组超出绑定异常在getRaster方法中出现

时间:2015-12-15 07:52:12

标签: java arrays exception raster

我正在阅读文件并尝试获取图像的宽度和高度。但是,每当我调用此行时,我都会收到异常

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

}} 

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

getPixels()方法将栅格的所有样本存储到输出数组中,每个像素不止一个。您可以使用getNumBands()获取每个像素的样本数。增加输出数组的长度:

int numBands = inImg.getRaster().getNumBands();
int[] pixels = new int[width * height * numBands];