category: Java
DATE : 2006/06/09 (Fri)
DATE : 2006/06/09 (Fri)
Java で画像を扱うには、BufferedImage クラスを使うと便利です。24ビット RGB 画像はもちろん、アルファ値(不透明度)や8ビットグレイスケール、インデックスカラーを扱うことも出来ます。
ただし、特定の座標のピクセル値を設定、または取得するメソッドである BufferedImage#getRGB(int, int) と BufferedImage#setRGB(int, int, int) には注意が必要です。
これらのメソッドは、ピクセル値としてデフォルト RGB モデルの値を使用します。具体的には、上位8ビットからアルファ値、赤成分、緑成分、青成分の32ビットの値です。例え使用している BufferedImage が扱っている画像が8ビットグレイスケール画像であっても、上記のメソッドのピクセル値はデフォルト RGB モデルの値です。
特に、アルファ値を扱っている場合(イメージの形式を BufferedImage#TYPE_INT_ARGB にしている場合など)には注意が必要です。黒(#000000)のピクセルを書き込もうとして次のようなコードを書いても、うまくいきません。
image.setRGB(x, y, 0x000000);
冒頭のように、アルファ値は不透明度を表します。つまり、上の例では不透明度が0なので、透明なピクセルを設定してしまうことになります。
そのため、アルファ値をきちんと考慮してピクセル値を設定する必要があります。
image.setRGB(x, y, 0xff000000);
BufferedImage#getRGB(int, int) の場合も上記と同様に、アルファ値が含まれています。特に、アルファ値を扱っていない形式の場合には、アルファ値の存在を忘れがちなので注意が必要です。
PR
●この記事にコメントする
忍者ブログ [PR]