インデックスカラー

インデックスカラー（）とはビットマップ画像の一種。画素（ピクセル）毎に色を直接指定するのではなく、カラーマップと呼ばれる色定義テーブルの参照番号を指定して画像を表現する形式。
概要.
ロゴマークなどのデザイン画の場合、1枚の画像の中で使用されている色の数が限られている事が多い。この場合、あらかじめ使用している色を「色番号1は赤30%・緑20%・青40%、色番号2は赤4%・緑92%・青8%...」のように色番号で定義しておき、画素毎のデータとしてはこの色番号を指定するようにすれば、高い色解像度を持ちつつデータ量を大幅に抑える事ができるようになる。このような色表現の事を「インデックスカラー（"indexed color"）」と呼ぶ。対して、画素毎に直接色を指定する方式は「トゥルーカラー（"true color"）」または「フルカラー（"full color"）」と呼ばれる。
インデックスカラーの色番号と実際の色の対応を定義する表は「カラーマップ（"color map"）」、「カラールックアップテーブル（"color lookup table"）」または「カラーパレット（"color palette"）」と呼ばれる。例えば、カラーマップの大きさが4色分だと、各画素に必要なデータは2ビット、16色だと4ビット、256色だと8ビットなどのようになる。CPUのデータ処理の単位として8ビットがよく用いられる事から、256色のインデックスカラーが最もよく用いられている。
色番号から実際の色に変換する作業をハードウェア（ビデオ出力回路）で行なう事ができるようになっていることが多い。この場合、あらかじめカラーマップをビデオ出力回路の特別な部分に書き込んでおけば、少量の画素データを転送するだけで画像が表示できるので高速な描画が可能となる。
例えば、のコンピュータ画像の主流である色表現は赤・緑・青それぞれに8ビットずつ、合計24ビット=3バイトのメモリを必要とするものであるが、これをVGAモードで表現するためには640×480×24=7,372,800ビット=900KiBになる。8086などの昔のパソコンに使われているCPUではこれほどの大きさのデータでは転送するだけでかなりの時間がかかってしまい、また半導体も高価で実装は現実的ではなかった。一方、8ビットインデックスカラーだとデータ量はこの3分の1になり、現実的に実装できる量になる。
ハードウェアによるカラーマップ変換機能があれば、情報量の多い画素データを変更せずに情報量の極めて少ないカラーマップだけを変更する事により表示色をきわめて高速に調整する事ができる。また、これを利用して高速な画像切り替えを実現する事もできる。例えば、色番号1に白を、それ以外の色番号には全て黒を割り当てておくと、色番号1で描いた図形だけが目に見えるが、これを色番号2に白を、それ以外の色番号には全て黒を割り当てた別のカラーマップに切り替えると、描画している画素を全く書き直す事なく、色番号2で描いた図形に変化させる事ができる。この手法は「パレットアニメーション」と呼ばれ、容量やハードウェア性能に制約のあるゲームプログラムで爆発の閃光をすばやく明滅させたい場合などによく用いられている手法である。
インデックスカラーは、その原理上、自然画像のような大量の色を使用する画像を扱うことは難しいが、色のはっきりしたロゴや非リアリスティックなイラストレーションでは画像ファイルの大きさを抑えることが出来るため、現在でも広く使用されている。Web用の画像として多く使われているGIF形式の画像フォーマットはインデックスカラーである。
トゥルーカラー形式の画像をインデックスカラー形式の画像に変換することは減色処理と呼ばれる。元々膨大な色数を含む自然画像を、人間の目に出来るだけ劣化を感じさせずに色数を減らすための高度な処理が必要となる。
ハードウェアでカラーマップの処理を行なっている場合、複数のインデックスカラー画像を同時に表示する場合には、両方の画像で使用している色を網羅したカラーマップを合成し、各画像の画素データをそれに合わせて調整するという作業が必要になる。
インデックス画像のカラーマップのうち1色を透過色（クロマキー）として利用することも多い。GIF、PNGはクロマキーをサポートする画像ファイルフォーマットである。
PCとインデックスカラー.
既述の例では、指定可能な色数が、実際に情報を持つ色数を上回っているケースとそのメリットについて説明されているが、初期のコンピュータであるPC-8801等でも「パレット機能」として、表示色を指定することが可能な機能が実装されている。これは、前述のパレットアニメーションのような用法以外に、グラフィックスプレーンが3プレーンで構成され、各々がR.G.B.の要素を持つ形で、8色での表示を実現しているものの、「白」で描画する場合、そのすべてのプレーンの該当部分のビットを立ててやる必要があり、赤、緑、青などのプレーンそのものが示す色に対し、最大3倍の処理を要することになる。使用頻度が高い色のうち、負荷の高い色を負荷の低いパターンと入れ替えることにより、描画処理の軽減を行うことも可能であった。
パーソナルコンピュータ (PC) では1985年以降のNECのPC-9801シリーズにおいて、ハードウェアによるインデックスカラー（4,096色中16色同時表示）が採用された。最も基本的な白や黒も自由に変更できたので、メニューの文字が読めなくなるというような事態も発生した。Macintoshの初期のカラー対応機ではソフトウエアによるインデックスカラーが行われた。これは画像領域だけを描きなおすというもので、リアルタイムにコントロールできなかった。なおNECの初期のWindows PC（PC-9821シリーズ、256色同時表示）でもソフトウェアによるインデックスカラーが行われていた。