0

私は現在、単色で塗りつぶされた形状を作成しようとしています。これは PNG として出力されます。これは私のコードです。

void CreateRedImage(int xSize, int ySize, String FileName){
        BufferedImage bf = new BufferedImage(xSize, ySize, BufferedImage.TYPE_INT_RGB);
        Color color = new Color(225, 000, 000);
        File f = new File(FileName + ".png");
        bf.setRGB(xSize, ySize, color.getRGB());
        try {
            ImageIO.write(bf, "PNG", f);
        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }

残念ながら、コードを実行すると、このエラー メッセージが表示されます。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
    at sun.awt.image.IntegerInterleavedRaster.setDataElements(IntegerInterleavedRaster.java:301)
    at java.awt.image.BufferedImage.setRGB(BufferedImage.java:988)
    at ImageCreation.CreateBlueImage(ImageCreation.java:53)
    at Main.main(Main.java:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

今、私は問題が次の行にあることを知っています:

bf.setRGB(xSize, ySize, color.getRGB());

ただし、コードが機能しない理由を突き止めることができませんでした。誰でもアイデアを得ましたか?

4

3 に答える 3

2

setRGB(int x, int y, int rgb)のドキュメントを見ると、次のように書かれています:-BufferedImage

この BufferedImage のピクセルを指定された RGB 値に設定します。ピクセルは、デフォルトの RGB カラー モデル、TYPE_INT_ARGB、およびデフォルトの sRGB カラー スペースにあると想定されます。

それはまた言う

座標が境界内にない場合、ArrayOutOfBoundsException がスローされることがあります。ただし、明示的な境界チェックは保証されていません。

xSizeこれは、とySizeが の境界内にないことを意味しますBufferedImage

アップデート:-

ドキュメントから、たまたま使用するコンストラクターの署名を注意深く見ると、次のように表示さBufferedImageれます。

public BufferedImage(int width, int height, int imageType)

つまり、あなたの場合xSize、 andySizewidthandheightであり、あなたの がco-ordinates(xSize, ySize)BIを持つ必要はありません。ここで要点を理解していただければ幸いです。

于 2013-03-12T15:54:45.770 に答える
0
bf.setRGB(xSize, ySize, color.getRGB());

setRGB は単一のピクセルを設定しています。x 座標は 0 .. xSize - 1、y 座標は同様です。

int c = color.getRGB();
for (int x = 0; x < xSize; ++x) {
    for (int y = 0; y < ySize; ++y) {
        bf.setRGB(x, y, color);
    }
}

または

Graphics2D g = bf.createGraphics();
g.setColor(color);
g.fillRect(0, 0, xSize, ySize);
g.dispose();

または、BufferedImage のラスターを使用することをお勧めします。

于 2013-03-12T15:49:36.833 に答える
0

おそらく bf.getGraphics().fillRect(...) のようなものが必要です

于 2013-03-12T15:51:25.120 に答える