16ビットカラーとは何か?RGB565/RGB555の仕組みと実務での使い方

イントロダクション:16ビットカラーとは何か

「16ビットカラー」とは、1ピクセルあたり16ビット(2バイト)で色を表現するカラーフォーマットの総称です。コンピュータグラフィックスやディスプレイの分野では「カラーデプス(色深度)」と呼ばれる概念の一つで、ピクセル毎に割り当てられるビット数が多いほど、表現できる色数や階調が豊かになります。16ビットカラーは「High Color(ハイカラー)」とも呼ばれ、一般的には65,536色(2^16)を表現できます。

基本的な仕組み:ビットの振り分けと色数

16ビットカラーは「どの色成分に何ビット割り当てるか」によっていくつかの形式があります。代表的なのは次の2つです。

  • RGB565:赤5ビット(R=5)、緑6ビット(G=6)、青5ビット(B=5)。緑に6ビットが割り当てられているのは、人間の視覚が緑の階調差に敏感であるため、緑成分に1ビット多く割り当てているからです。表現色数は 2^16 = 65,536色(実際には赤32段階 × 緑64段階 × 青32段階)。
  • RGB555 / ARGB1555:赤5ビット、緑5ビット、青5ビット、残りの1ビットをアルファ(不透明/透過)に使う形式。アルファを使わない場合は未使用(パディング)や拡張ビットとして使われることもあります。RGB555は赤32 × 緑32 × 青32 = 32,768色だが、通常1ビットの余りを合わせて65,536通りを作る場合もある。

なぜ緑だけ6ビットなのか(RGB565の理由)

人体の視覚は緑の明るさ変化に対して敏感で、緑の階調がより多い方が見た目の品質が向上します。そのためRGB565は、限られた総ビット数の中で最も自然に見える配分として広く採用されました。特にディスプレイや組み込みデバイス、モバイル機器、グラフィックハードウェアのテクスチャフォーマットなどで多用されます。

16ビットと他の色深度の比較

  • 8ビットカラー(256色): パレット方式を用いることが多く、色数が少ないため階調やグラデーションでバンディング(段差)が見えやすい。
  • 16ビットカラー(65,536色): 8ビットより階調は大幅に改善されるが、フルカラーとされる24ビット(約1,677万色)/32ビット(アルファ含む)よりは階調情報が不足する場合がある。
  • 24ビットカラー(True Color): R/G/Bそれぞれ8ビット、約1,677万色。写真やフルカラーイメージの表現には標準的。
  • 32ビットカラー: 多くは24ビットの色に8ビットのアルファチャンネル(透過)を加えたもの。

品質面の特徴:利点と欠点

  • 利点
    • メモリ使用量と帯域幅が低い(24/32ビットに比べて約1/1.5〜1/2)ため、組み込み系や古いハードウェアで有利。
    • 処理コストが低く、描画や転送が高速。
    • 緑に6ビットを割くことで人間の視覚にとって自然な見え方を確保しやすい(RGB565)。
  • 欠点
    • 色分解能が24ビットに劣るため、微妙なグラデーションでバンディングが発生しやすい。
    • 色情報をフル8ビットから量子化(減色)する際に色ずれが発生する。特に彩度の高い色や中間トーンで目立つ。
    • アルファをしっかり扱う用途ではARGB1555の1ビットアルファは不十分で、透過表現に制限がある。RGBA4(各4ビット)など別規格も存在するが、それぞれ表現力が限られる。

実践的な扱い:変換と補正

8ビット(0–255)から5ビット(0–31)への変換や、逆の拡大には量子化誤差が出ます。簡単な変換方法の例を示します(概念的な式):

  • 8ビット → 5ビット(丸め例):R5 = round(R8 × 31 / 255)
  • 5ビット → 8ビット(再拡張例、単純拡張):R8 = (R5 << 3) | (R5 >> 2) — ビットを複製して値の偏りを抑える手法

良好な見た目を保つためには「ディザリング(誤差拡散)」を用いて量子化ノイズを目立たなくすることがよく行われます。また、ガンマ補正(sRGB空間など)を考慮して線形空間で処理することも重要です。単純に整数で縮小/拡大すると見た目に不自然な階調が残ることがあります。

用途と歴史的背景

16ビットカラーはかつてPCの「High Color」モード(Windows 95/98など)や、組み込み機器、モバイル機器、古いゲーム機・携帯ゲーム機、ハードウェアテクスチャ(GPUのメモリ節約)などで広く使われました。処理性能とメモリ容量が限られていた時代に、表示品質とコストのバランスが取れる選択肢として普及しました。

注意点:16ビットと「16ビット浮動小数点」は別物

誤解しやすい点として、ここで述べている「16ビットカラー」は「ピクセルあたり16ビット」を意味します。一方で近年よく使われる「16ビット浮動小数点(FP16)」はチャンネルあたり16ビットの半精度浮動小数点を意味し、ピクセルあたり48ビットや64ビット(例えば3チャンネル×16ビット)を想定する場合があります。HDRレンダリングや科学計算での「ビット深度」とは別物なので区別が必要です。

実装上のポイント

  • メモリ配置:16ビットは2バイト整列になるため、ピッチ(ラインごとのバイト数)やエンディアンに注意する必要があります。
  • ハードウェアサポート:多くのGPUやLCDコントローラはRGB565を直接サポートしており、転送・表示が効率的。
  • アルファ処理:半透明合成が必要な場合は、ARGB1555の1ビットアルファでは表現力不足。通常は合成前に高精度で処理し、最終表示用に16ビットに落とす設計が望ましい。

まとめ:いつ16ビットカラーを選ぶべきか

16ビットカラーは、メモリや帯域幅を節約しつつ見た目をある程度保ちたい場面で有効です。組み込み機器、ローエンドのディスプレイ、GPUテクスチャのメモリ節約、あるいは古い環境の互換性確保などが典型的な用途です。一方で写真編集、プロフェッショナルなカラー作業、HDR表現、透過処理を多用するUIでは24/32ビット以上の色深度を選ぶべきです。

参考文献