/ / Java BufferedImage.getRGB() - 境界外座標 - java、bufferedimage

Java BufferedImage.getRGB() - 境界外の座標を設定する - java、bufferedimage

だから、私はBufferedImageの特定のピクセルの色を試しています

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

そしてそれはMainクラスのコンストラクタから呼び出されます。

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

プロジェクトを実行すると、このエラーが発生します。

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は「int pixel = image.getRGB(xx、yy);」、行41はコンストラクタ内で呼び出される場所、行206はメインメソッドです。


前もって感謝します! ^ _ ^

回答:

回答№1は1

きみの xx 0から幅までではなく、0から高さまでです。きみの yy 0から高さにではなく、0から幅になります。


回答№2の場合は1
level = imageLoader.loadImage ("/levels/level_test.png");

使用している画像は、メインウィンドウの幅と高さの合計よりも小さくなければなりません。そしてこの場合、RGB値がとられるところ2 ^ Xのサイズの写真。ここでX = 1,2,3,4,5,6,7,8,9 ... ..

これを試して : level_test.pngを512 x 512ピクセルにサイズ変更します。

配列に境界が含まれているため、上記の解決策があります。

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

回答№3の場合は1

問題はここにあります:

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

そのはず:

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