BufferedImageクラスとは

広告

BufferedImageクラスについて色々調べてみたいと思います。BufferedImageクラスは簡単に言えばメモリ上に領域を作って、そこに画像を読み込んだり、物体を描画したりといったことを行う為のものかと思います。その結果をファイルに書き出したり、実際に表示したりといったこともできます。

まずクラス図から見てみましょう。

  • java.lang.Object
  • java.awt.Image
  • java.awt.image.BufferedImage
  • public class BufferedImage extends Image implements WritableRenderedImage, Transparency

コンストラクタは下記の3つが用意されています。

コンストラクタ
BufferedImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, Hashtable<?,?> properties)
ColorModel および Raster を指定して、新しい BufferedImage を構築します。
BufferedImage(int width, int height, int imageType)
定義済みイメージ型の中の 1 つで BufferedImage を構築します。
BufferedImage(int width, int height, int imageType, IndexColorModel cm)
定義済みイメージ型の TYPE_BYTE_BINARY または TYPE_BYTE_INDEXED のどちらかで BufferedImage を構築します。

この中で使い方が現在分かるのは2番目のものだけです。

定義済みイメージ型の中の 1 つで BufferedImage を構築します。イメージの
ColorSpace は、デフォルトの sRGB 領域になります。 

パラメータ:
  width - 作成されたイメージの幅
  height - 作成されたイメージの高さ
  imageType - 作成されたイメージの形式

幅と高さ、そしてimageTypeを指定してBufferedImageを作成します。imageTypeは取りうる値が決まっていて、下記の中から1つ選択します。

説明
static int TYPE_3BYTE_BGR青、緑、および赤が 3 バイトに格納された 8 ビット RGB 色成分 (Windows スタイルの BGR カラーモデルに対応) によるイメージを表します。
static int TYPE_4BYTE_ABGR青、緑、および赤が 3 バイトに格納され、1 バイトのアルファを持つ 8 ビット RGBA 色成分によるイメージを表します。
static int TYPE_4BYTE_ABGR_PRE青、緑、および赤が 3 バイトに格納され、1 バイトのアルファを持つ 8 ビット RGBA 色成分によるイメージを表します。
static int TYPE_BYTE_BINARY不透明な byte パックの 1、2、または 4 ビットイメージを表します。
static int TYPE_BYTE_GRAY符号なし byte グレースケールイメージ (インデックスなし) を表します。
static int TYPE_BYTE_INDEXEDインデックス付き byte イメージを表します。
static int TYPE_CUSTOMイメージ型が認識されない ので、イメージは必ずカスタマイズされています。
static int TYPE_INT_ARGB整数型ピクセルにパックさ れた 8 ビット RGBA 色成分によるイメージを表します。
static int TYPE_INT_ARGB_PRE整数型ピクセルにパックさ れた 8 ビット RGBA 色成分によるイメージを表します。
static int TYPE_INT_BGR青、緑、および赤が整数型 ピクセルにパックされた 8 ビット RGB 色成分 (Windows スタイルまたは Solaris スタイルの BGR カラーモデルに対応) によるイメージを表します。
static int TYPE_INT_RGB整数型ピクセルにパックさ れた 8 ビット RGB 色成分によるイメージを表します。
static int TYPE_USHORT_555_RGBアルファなしの 5-5-5 RGB 色成分 (5 ビットの赤、5 ビットの緑、5 ビットの青) によるイメージを表します。
static int TYPE_USHORT_565_RGBアルファなしの 5-6-5 RGB 色成分 (5 ビットの赤、6 ビットの緑、5 ビットの青) によるイメージを表します。
static int TYPE_USHORT_GRAY符号なし short グレースケールイメージ (インデックスなし) を表します。

色々な種類がありますが、透明度などを考えないでいいならBufferedImage.TYPE_INT_BGRを指定しておけばいいかと思います。

使い方としては下記のようになります。

BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_BGR);

( Written by Tatsuo Ikura )