3

私はJavaでRGB値を扱うのが本当に苦手なので、これを使って小さな実験を始めました。

私はこれに行き着きました: 画像をロードし、RGB 値を取得し、同じ値で新しい画像を作成します。残念ながら、次のコードのように、これは機能しません (画像の表示が異なります。画像を参照してください)。

BufferedImage oriImage=ImageIO.read(new  URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));

int[] oriImageAsIntArray = new int[oriImage.getWidth()*oriImage.getHeight()];
oriImage.getRGB(0, 0, oriImage.getWidth(),oriImage.getHeight(), oriImageAsIntArray, 0, 1);

BufferedImage bfImage= new BufferedImage(oriImage.getWidth(),oriImage.getHeight(),
            BufferedImage.TYPE_INT_ARGB);

bfImage.setRGB(0,0,bfImage.getWidth(),bfImage.getHeight(),oriImageAsIntArray, 0, 1);

出力

4

1 に答える 1

5

どうやら、getRGBsetRGBが正しく使用されていませんでした。

コードを次のように変更しました。

oriImage.getRGB(0, 0, oriImage.getWidth(),oriImage.getHeight(), oriImageAsIntArray, 0,  oriImage.getWidth());
(...)
bfImage.setRGB(0,0,bfImage.getWidth(),bfImage.getHeight(),oriImageAsIntArray, 0, bfImage.getWidth());

...そして、画像が正しく表示されました。この最後の議論が何なのか、私はまだ理解していません。JavaDoc では、次のように説明されています。

scansize - scanline stride for the rgbArray
于 2014-03-01T18:19:21.423 に答える