2020.03.23
色をARGB値に分解
はじめに
色の分解方法
BufferedImage.getRGBメソッド
public static int getRGB( int x, int y )
・(x,y)で指定した画像座標の色情報を取得します。 パラメータ x : 画像のx座標(単位ピクセル) y : 画像のy座標(単位ピクセル) 戻り値 (x,y)の色情報
![1画素の色表現 1画素の色表現](components/img/color-pixel-32bit.png)
のように並べて表現しています。
// (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値化
- 2値化 その2
- 色見本
- 光と色の3原色
- テーブルによる色変換 その1
- カラーマップ
- 画像の新規作成
- 画像の新規作成 その2
- 縁付き画像変換
- エッジ(境界)検出
- 画像の2倍拡大
- グラデーション画像(横方向)
- グラデーション画像(放射状)
- グラデーション画像(4隅の色)
- グレースケール変換
- より自然なグレースケール変換
- 画像の色
- 画像ファイル形式
- 画像処理とは
- RGBの平均値
- インデックスカラー
- 画像をセピア色にする
- 画像の一部を切り出す
- 画像を操作するクラスの作成
- N値化
- 画像の色反転
- ノイズ画像の作成
- 画像にノイズを加える
- 正確な割合のノイズ画像作成
- 指定色の画素数取得
- 画像をぼかす
- 空間フィルタリング
- 非圧縮
関連コンテンツ
数値を2進数で表したときの各桁の「0」と「1」に対して演算を行えます。4種類の演算、AND(論理積)、OR(論理和)、XOR(排他的論理和)、NOT(否定)を詳しく説明しています。
2値化は、画像処理の1つの方法で、カラー画像を2つ色だけで表現する画像に変換することです。この記事では、2値の画像メモリを使って変換しています。