2020.03.23
色をARGB値に分解
はじめに
色の分解方法
BufferedImage.getRGBメソッド
public static int getRGB( int x, int y )
・(x,y)で指定した画像座標の色情報を取得します。 パラメータ x : 画像のx座標(単位ピクセル) y : 画像のy座標(単位ピクセル) 戻り値 (x,y)の色情報
のように並べて表現しています。
// (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;
それでは、上記のソースコードがどのように動いているかを例で確認していきましょう。
color = 11111110100000000000111100110100(ビット表現)
int a = color >> 24;
( color >> 24 )の値は、00000000000000000000000011111110
元のcolorのビットが右に24回シフトされています。
この演算により右から8ビットだけの値が残るので、0~255の範囲の値になります。
これがa(アルファ)の値です。
int r = ( color >> 16 ) & 0xff;
( color >> 16 )の値は、00000000000000001111111010000000
元のcolorのビットが右に16回シフトされています。
0xffをビットで表すと、 00000000000000000000000011111111
AND演算をした結果は、00000000000000000000000010000000
この演算により右から8ビットだけの値が残るので、0~255の範囲の値になります。
これがr(赤)の値です。
int g = ( color >> 8 ) & 0xff;
( color >> 8 )の値は、 00000000111111101000000000001111
元のcolorのビットが右に8回シフトされています。
0xffをビットで表すと、 00000000000000000000000011111111
AND演算をした結果は、00000000000000000000000000001111
この演算により右から8ビットだけの値が残るので、0~255の範囲の値になります。
これがg(緑)の値です。
以上です。
関連コンテンツ
数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。
2値化は、画像処理の1つの方法で、カラー画像を2つ色だけで表現する画像に変換することです。この記事では、2値の画像メモリを使って変換しています。