「インデックスカラー」とは色のインデックス(索引)を作成して、それを絵のデータに当てはめていく手法です。
「インデックスカラー」では最大256色のパレットを作成できます。
そのパレットの色を使用して絵を表現したものを「インデックスカラー」といいます。
インデックスカラーの例
 |
こんな画像があったとしたら...
|
↓
|
 |
こんなパレットインデックスを生成して
|
↓
|
 |
画像の各ドットに番号をふっていく |
これが「インデックスカラー」。
そしてこれを圧縮したフォーマットが「GIF」です。
ちなみに圧縮方式をざっくりと説明しますと、上図を使用した場合
「1が1個」「2が1個」「1が2個」「2が1個」「3が1個」「1が2個」..
という感じに連続したカラーをひとまとめにする感じです。
つまり、「GIF」の中には「パレット」の色データと「色がいくつ連続しているか?」という2種類のデータがあることになります。
なぜ「256色?」
いったい「256色」の「256」という数値はどういう根拠のある数値なのでしょうか?
これはマシン語に依存します。
通常コンピュータが理解できるプログラムは「0」か「1」のみです。
この「0」と「1」を大量に組み合わせてプログラムが動いています。
2進数の原理ですね。
この1つの単位を「bit(ビット)」といいます。
さらにこの1ビットを8つ集めたプログラム上での最小単位を「1byte(バイト)」といいます。
2進数で表すと8ビット=1バイト=「11111111」です。これは10進数では「255」です。
これに「00000000」、つまり10進数でいうところの「0」を合わせて「256」通りの表現が可能になります。
これが「256」色の根拠となります。
さて、インデックスカラーで使用するときは「最大」256色ですが、もっと少ない色数で表現する場合があります。
この場合「2」「4」「8」「16」「32」「64」「128」といった色数がお勧めです。
それは何故でしょう?
「2」という数はプログラム上で「1」で表され、「4」数は「11」で表されます。
このまま「8」は「111」、「16」は「1111」、「32」は「11111」、「64」は「111111」、「128」は「1111111」という具合で表されます。
1桁ずつ増えていっていますね。
ではたとえば「95」色数ではどうでしょう?
これは「1011110」です。
お気づきになられましたか?「128」色とデータサイズが同じですよね。両方とも7桁です。
同じデータ量を使うならデータ量のMAX使ったほうがよいでしょう。
実際は中途半端な色数でも、データサイズは小さくなります。
これはパレットのサイズが小さくならなくても、色数が減ると同じ色が連続する場合が多くなるため、実際のデータ容量が減るためだと思われます。
(データには「パレット」のデータと「いくつ連続しているか?」という2種類のデータがあるため、後者の容量が減るのだと思います。)
しかし、「2の乗数」
ごとの数値を選ぶほうがパレットデータも小さくなるため、より小さいサイズのデータが作成できます。