2016-11-28 6 views
-2

Im пытается писать RGB данные из BufferedImage в массив с помощью растрового изображения, но Im получение координат из ограничивающей Exception, что я не могу понять:координат из ограничивающей Exception

int height = img.getHeight(); 
    int width = img.getWidth(); 

    Raster R = img.getData(); 
    double[] output = new double[3]; 


    double[][][] pixel = new double[3][255][255]; 

    for(int i=0;i<height;i++){ 
     for(int j=0;j<width;j++){ 
      R.getPixel(i,j,output); 
      pixel[0][i][j] = output[0]; 
      pixel[1][i][j] = output[1]; 
      pixel[2][i][j] = output[2];   

Предполагается, для записи значения пикселя с координатами (i,j) для красного в pixel[0][i][j], для зеленого в [1][i][j] и синим в pixel[2][i][j].

Im получая исключение для линии:

R.getPixel(i,j,output); 

StackTrace, используя изображение с высотой 1 и шириной 2:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds! 
at java.awt.image.ComponentSampleModel.getSampleDouble(Unknown Source) 
at java.awt.image.SampleModel.getPixel(Unknown Source) 
at java.awt.image.Raster.getPixel(Unknown Source) 
at Color_Histogram.calculate(Color_Histogram.java:43) 
at Color_Histogram.main(Color_Histogram.java:83) 
+0

Подсказка: вы хотите вставить полное исключение stacktrace. – GhostCat

+0

Не помещайте информацию в комментарии; обновите свой вопрос, пожалуйста. – GhostCat

ответ

0

эта линия не так

double[][][] pixel = new double[3][255][255];

это должно быть

double[][][] pixel = new double[3][height][width];

0

Я использовал изображение размером 1 × 2 для целей тестирования, используя другое изображение большего размера, как правило, исправляет проблему и отлично работает.