2015-01-25 1 views
0

Итак, я пытаюсь цвета конкретного пикселя в BufferedImage ...Java BufferedImage.getRGB() - координата вне границ

public void LoadImageLevel (BufferedImage image) { 

    int w = image.getWidth(); 
    int h = image.getHeight(); 

    System.out.println (w + " " + h); 

    for (int xx = 0; xx < h; xx++) { 

     for (int yy = 0; yy < w; yy++) { 

      int pixel = image.getRGB (xx, yy); 

      int red = (pixel >> 16) & 0xff; 
      int green = (pixel >> 8) & 0xff; 
      int blue = (pixel) & 0xff; 

      if (red == 255 && green == 255 && blue == 255) { 

       handler.addObject (new Block (xx * 32, yy * 32, ObjectID.Block, 32, 32)); 
      } 
     } 
    } 
} 

И это вызывается из главного конструктора класса:

ImageLoader imageLoader = new ImageLoader(); 

    level = imageLoader.loadImage ("/levels/level_test.png"); 

    LoadImageLevel (level); 

BufferedImage загружается из моего BufferedImageLoader класса:

import java.awt.image.BufferedImage; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

public class ImageLoader { 

    private BufferedImage image; 

    public BufferedImage loadImage (String path) { 

     try { 

      image = ImageIO.read (getClass().getResource (path)); 

     } catch (IOException e) { 

      e.printStackTrace(); 
     } 

     return image; 
    } 
} 

При запуске проекта I получить эту ошибку:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds! 
    at sun.awt.image.ByteInterleavedRaster.getDataElements(Unknown Source) 
    at java.awt.image.BufferedImage.getRGB(Unknown Source) 
    at com.main.index.Game.LoadImageLevel(Game.java:190) 
    at com.main.index.Game.<init>(Game.java:41) 
    at com.main.index.Game.main(Game.java:206) 

Линия 190 является «ИНТ пиксель = image.getRGB (хх, уу);», строка 41, где он называется в конструкторе, и линия 206 является основным методом.


Заранее благодарен!^_^

ответ

1

Ваш xx идет от 0 до высоты, а не от 0 до ширины. Ваш yy идет от 0 до ширины, а не от 0 до высоты.

+0

Спасибо, даже не понял, что ... Thx: D! – user2975915

1
level = imageLoader.loadImage ("/levels/level_test.png"); 

Изображение, которое вы используете, должно быть меньше общей ширины и высоты основного окна. И в этом случае Принимаются значения RGB. Изображение размером 2^X, где X = 1,2,3,4,5,6,7,8,9 .... ..

Попробуйте следующее: resize level_test.png до 512 на 512 пикселей.

Выше решения для этого, так как массив содержит границы.

java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds! 
at sun.awt.image.ByteInterleavedRaster.getDataElements(Unknown Source) 
1

Проблема здесь:

int pixel = image.getRGB (xx, yy); 

Оно должно быть:

int pixel = image.getRGB (yy, xx); 
Смежные вопросы