カラー画像の画素にアクセス

次の 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 なのね.