HexカラーからのRGBチャネル抽出

右シフトとANDマスキングを使用して、0xFF6633のようなパックされた24ビットHexカラー値から個別の赤、緑、青チャネルを抽出します。

Practical Applications

詳細な説明

ビット演算によるRGBチャネル抽出

コンピュータグラフィックスでは、色は各チャネル8ビットの単一の整数として格納されることが一般的です。0xFF6633のような24ビットRGBカラーは赤、緑、青を1つの値にパックします:

0xFF6633 = 11111111 01100110 00110011
           ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
             赤       緑       青

各チャネルの抽出

右シフトでターゲットバイトを最下位位置に移動し、0xFFとANDして分離:

const color = 0xFF6633;

const red   = (color >> 16) & 0xFF;  // 0xFF = 255
const green = (color >>  8) & 0xFF;  // 0x66 = 102
const blue  =  color        & 0xFF;  // 0x33 = 51

アルファチャネル付き(32ビットARGB)

アルファチャネル付きの32ビットカラー(ARGB形式):

const color = 0x80FF6633;

const alpha = (color >> 24) & 0xFF;  // 0x80 = 128
const red   = (color >> 16) & 0xFF;  // 0xFF = 255
const green = (color >>  8) & 0xFF;  // 0x66 = 102
const blue  =  color        & 0xFF;  // 0x33 = 51

チャネルの再パック

左シフトとORでチャネルを再結合:

const packed = (red << 16) | (green << 8) | blue;
// アルファ付き:
const argb = (alpha << 24) | (red << 16) | (green << 8) | blue;

個別チャネルの操作

赤の明るさだけを半減:

const dimRed = ((red >> 1) << 16) | (green << 8) | blue;

赤と青を交換:

const swapped = (blue << 16) | (green << 8) | red;

ユースケース

CanvasやWebGL開発者はチャネルごとのエフェクト適用のために個別カラーチャネルを抽出します。HTML5 Canvas ImageDataバッファ(RGBAバイトを格納)からのピクセルデータ処理において、ビット演算によるチャネルの抽出と操作はCSSカラー文字列の解析より3-5倍高速です。リアルタイムフィルター、画像調整、手続き的テクスチャ生成で数百万ピクセルを処理する際に重要です。

試してみる — Bitwise Calculator

フルツールを開く