カラー画像の画素にアクセス
次の loadImage() でカラー画像を BufferedImage に入れる.
private static BufferedImage loadImage(String filename) { InputStream is = null; try { is = new FileInputStream(filename); BufferedImage img = ImageIO.read(is); return img; } catch (Exception e) { throw new RuntimeException(e); } finally { if (is != null) try { is.close(); } catch (IOException e) {} } }
そして main を書いてテストする.
public static void main(String[] args) { BufferedImage image; image = loadImage("c:\\a.bmp"); Raster ras = image.getRaster(); int num = 4*4*3; int[] a = new int[num]; a = ras.getPixels(0, 0, 4, 4, (int[])null); System.out.println("この行にブレークポイントを設定"); }
テストのため4x4のカラー画像を用意した.そしてこれを IrfanView でグレースケールに変換した画像でも試行した.どんな画像かわかりやすいようにと,各画像を拡大した状態を並べてスクリーンショットを取得した.
画素は num に RGB 順,ラスタスキャン方式で格納されていた. (0,0)R, (0,0)G, (0,0)B, (1,0)R, (1,0)G, ... と.
カラー画像を読み込んだとき, image.getType() は 5,すなわち TYPE_3BYTE_BGR だった.グレースケール画像を読み込んだとき, image.getType() は 10,すなわち TYPE_BYTE_GRAY だった.
あれ.getType() では BGR だけれど,getPixels() で取り出したときは RGB なのね.