誰かがBufferedImageからRGB値の配列を取得する方法を説明できますか?
BufferedImageにグレースケールイメージがあり、イメージを説明する0〜255の値の配列を抽出する必要があります。
PufferImageをPNGに保存できるので、BufferedImageが正しいことを知っています。ただし、int[] dataBuffInt = ((DataBufferInt) heightMap.getDataBuffer()).getData();
を使用すると、大量の負の数が得られます。
私はしばらく検索して、いくつかの値をシフトするいくつかの参照( post )を見ましたが、それらが何を言っているのか本当に理解していません。
基本的に、BufferedImageから0〜255 RBG値の配列に移動したいと思います。
自分自身を適切に説明したかどうかわかりません。詳細を尋ねる必要があります。
編集:
@ Garbageヒントをありがとう。私はint [] dataBuffInt = heightMap.getRGB(0、0、heightMap.getWidth()、heightMap.getHeight()、null、0、heightMap.getWidth());を試しました。しかし、同じ結果が得られます。
@ Greg Kopff結果は2で、TYPE_INT_ARGBに設定されました
ピクセルの1つから取得するint値は、赤、緑、青、およびアルファで構成されているため、負の数になります。各色成分の値を取得するには、色を分割する必要があります。
これを行う最も簡単な方法は、 Color
オブジェクトを作成し、 getRed
、 getGreen
および getBlue
(同様にコンポーネントを取得する getAlpha
)メソッドとして:
public static void main(String... args) throws Exception {
BufferedImage image = ImageIO.read(
new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));
int w = image.getWidth();
int h = image.getHeight();
int[] dataBuffInt = image.getRGB(0, 0, w, h, null, 0, w);
Color c = new Color(dataBuffInt[100]);
System.out.println(c.getRed()); // = (dataBuffInt[100] >> 16) & 0xFF
System.out.println(c.getGreen()); // = (dataBuffInt[100] >> 8) & 0xFF
System.out.println(c.getBlue()); // = (dataBuffInt[100] >> 0) & 0xFF
System.out.println(c.getAlpha()); // = (dataBuffInt[100] >> 24) & 0xFF
}
出力:
173
73
82
255