Javaプログラミング学習サイト ゆるゆるプログラミング

2020/10/20 公開

・色をARGB値に分解

画像で使用されている色のうち24ビットフルカラー)、32ビットカラーからR(赤)、G(緑)、B(青)、A(アルファ値)を抽出する方法を説明します。

JavaのBufferedImageクラスに読み込んだ画像の色情報は、getRGBメソッドで取得することができます。任意の画像座標(x,y)を引数として与えると色情報が取得できます。

BufferedImage.getRGBメソッド

public static int getRGB( int x, int y )
■(x,y)で指定した画像座標の色情報を取得します。

  パラメータ x : 画像のx座標(単位ピクセル)
        y : 画像のy座標(単位ピクセル)

  戻り値     (x,y)の色情報

getRGBメソッド戻り値は、int型(32bit)の整数で、以下の仕様で色の値が格納されています。

1画素の色表現1画素の色  

画素アルファ値(8bit)+赤成分(8bit)+緑成分(8bit)+青成分(8bit)=32bit

のように並べて表現しています。

この値からARGBへの分解には、ビット操作の右シフトとAND演算を使います。

ビットシフトの演算子は、">>"で、指定した回数分ビットを右にずらす操作のことです。1回の右シフトは2で割ることと同じです。

AND演算は、ビットごとに演算する操作の1つで、両方のビットが1の場合だけ1となり、その他は0になります。

AND

ARGBの抽出は、以下のソースコードを参考にしてください。

    // (x,y)の色をcolorに代入
    int color = img.getRGB( x, y );
    
    // colorをargbに分解
    int a = color >> 24;
    int r = ( color >> 16 ) & 0xff;
    int g = ( color >> 8 ) & 0xff;
    int b = color & 0xff;

それでは、上記のソースコードがどのように動いているかを例で確認していきましょう。

getRGBメソッドで取得したint型変数colorの値を以下とします。

 color = 11111110 10000000 00001111 00110100ビット表現)

    int a = color >> 24;

 ( color >> 24 )の値は、00000000 00000000 00000000 11111110

 元のcolorのビットが右に24回シフトされています。

 この演算により右から8ビットだけの値が残るので、0~255の範囲の値になります。

 これがa(アルファ)の値です。

    int r = ( color >> 16 ) & 0xff;

 ( color >> 16 )の値は、00000000 00000000 11111110 10000000

 元のcolorのビットが右に16回シフトされています。

 0xffをビットで表すと、 00000000 00000000 00000000 11111111

 AND演算をした結果は、00000000 00000000 00000000 10000000

 この演算により右から8ビットだけの値が残るので、0~255の範囲の値になります。

 これがr(赤)の値です。

    int g = ( color >> 8 ) & 0xff;

 ( color >> 8 )の値は、 00000000 11111110 10000000 00001111

 元のcolorのビットが右に8回シフトされています。

 0xffをビットで表すと、 00000000 00000000 00000000 11111111

 AND演算をした結果は、00000000 00000000 00000000 00001111

 この演算により右から8ビットだけの値が残るので、0~255の範囲の値になります。

 これがg(緑)の値です。

以上が、int型色情報からARGBを抽出する方法です。

24ビットカラーの場合でも色情報は32ビットで取得しますが、アルファ値(透過)を計算する必要はありません。必要であれば"11111111"(透過なし)にするのが無難です。

■関連コンテンツ

アルファ値(透過) アルファ値(透過)について
ビット演算子 ビット演算子について解説
ビットシフト ビットのずらしかた
画像の色 画像の色について解説
減色処理(メディアンカット) メディアンカットのJavaソース
カラーマップ 色番号に色を割り当て
光と色の3原色の考え方を解説-画像

光と色の3原色

光の3色(RGB)の混合と、インクの3色(CMY)の混合の考え方を説明しています。

画素について説明-画像

画素

画素とは、デジタル画像データを構成している色情報を持った点のことです。

■新着情報

2021.08.04 書式指定でコンソール出力 printf()とは?

■広告

Topへ