コンピュータ・ディスプレイでは、「ピクセル(pixel、picture elementの略、画素)」と呼ばれる光の点がビットマップ表現の格子の役目をします。 そしてこのピクセルのひとつひとつにメモリが対応していて、各ピクセルの色と明るさをコントロールしています。 このメモリのことを「フレームバッファ(frame buffer)」といいます。 したがってコンピュータ・ディスプレイ上で画像処理をする場合、実際にはこのフレームバッファに対して色々な処理をすることになります。
ディスプレイ上の各ピクセルは、縦と横の座標番号で識別されます。 横方向の座標番号は左から右に向かって番号が増え、縦方向の座標番号は上から下に向かって番号が増えます。 数学で用いられる直交座標では、横方向の座標は左から右に増加し、縦方向の座標は下から上に増加しますが、コンピュータでは文字が書かれる方向が左から右に、そして上から下に向かう関係から、縦方向の座標番号は上から下に向かって増加します。
ディスプレイ上でビットマップ表現をする場合、最も単純なものは、ひとつのピクセルに対して1ビットのメモリが対応するモデルです。 例えばビットの「0」に「○」を、「1」に「●」を対応させますと、フレームバッファの内容とディスプレイ上の画像の関係は下図のようになります。
この単純なモデルでは明(白)と暗(黒)の2色しか表すことができませんので、「モノクロ(単色)モデル」と呼ばれます。 初期のコンピュータグラフィックは全てこのモノクロモデルでしたから、処理される画像も白黒写真や一色刷りのマンガのようなものばかりでした。
単色モデルは一色刷りのマンガと同様、必ずしも白と黒を表すわけではなく、実際にはディスプレイの蛍光色の色になります。 したがって、「モノクロモデル」を「白黒モデル」と呼ぶのはあまり適切ではありません。 もちろん、「黒白ショウモデル」と呼ぶのはもっと適切ではありません。(^^;)
ちなみに「モノクロ(monochrom)」という言葉は、ギリシャ語で「単一」を意味する「monos」と、「色」を意味する「kbroma」に由来します。
次にカラー画像を表現するビットマップモデルを考えましょう。 カラー画像を表現するためには、ひとつのピクセルが光の3原色、つまり赤・緑・青の3色を発光することができなければなりません。 そしてそのピクセルに対応するフレームバッファは、原色ごとに別々のメモリを割り当てて各ピクセルの色をコントロールします。
一番簡単なカラーモデルは、原色ごとに1ビットのメモリが対応したモデルです。 この場合、各3原色をコントロールするメモリは、下図のように、 ちょうど3枚のメモリ板のような構造になっていると考えることができます。 この各メモリ板のことを「プレーン(平面)」といいます。
このモデルの場合、3組のプレーンの組み合わせにより、下表のような8種類の色(=23色)を表現することができます。 これが一番簡単な「8色カラーモデル」で、一昔前のカラーディスプレイはほとんどがこれでした。
色 | 黒 | 赤 | 緑 | 青 | 黄 | 紫 | 水 | 白 |
---|---|---|---|---|---|---|---|---|
赤プレーン(1ビット) | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
緑プレーン(1ビット) | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 |
青プレーン(1ビット) | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
次に、原色ごとに8ビット(1バイト)のメモリが対応したモデルを考えましょう。 この場合、各3原色は28=256通りの明るさにコントロールすることができますから、全体として、
の色を表現することができます。 このモデルのことを「16M(メガ)色カラーモデル」と呼び、現在のところ色数が一番多いモデルです。 人間の視覚はだいたい35万色の色を識別することができると言われていますが、この色数はそれを遥かに上回っており、原理的には実物と全く変わらない色調の画像を表現することができます。 このため、このモデルのことを「フルカラーモデル(full color model)」あるいは「ツゥルーカラーモデル(true color model)」と呼ぶ場合もあります。
ちなみに、「フルカラーモデル」は日本独自の用語(和製英語)で、欧米では「true color model」が一般的です。
1つのピクセルに対応するフレームバッファのビット数を「フレームバッファの深さ」といいますが、2を深さでベキ乗した値、つまり2(深さ)がそのカラーモデルで表現できる色数になります。 そこで色数の代わりにフレームバッファの深さを用いて、「3ビットカラーモデル」とか「24ビットカラーモデル」などと呼ぶこともあります。
フルカラーモデルは十分すぎるほどの色数を表現できますが、1ピクセルについて3バイトも必要なため、フレームバッファの容量が膨大なものになってしまいます。 例えば幅が640ピクセル、高さが480ピクセルの画像(これを「640×480ピクセルの画像」と表現します)を表現するためには、
と、900キロバイトものフレームバッファが必要です。
実際の画像では、色の種類はたくさん必要ですが、それを1枚の画像で同時に使うことは希です。 そこで、そのことを利用してフレームバッファの容量を少なくしようというモデルが「カラーマップモデル」です。 カラーマップモデルでは、1枚の画像で同時に使う色を「カラーマップ」あるいは「カラーパレット」という特別なメモリに記憶しておき、 フレームバッファはそのカラーマップの番号を指定することによって、間接的に各ピクセルの色をコントロールします。
例えば、同時に使う色数がたかだか16色ならば、赤・緑・青の3原色ごとに8ビットのメモリを対応させた16個のカラーマップを用意し、それらを同時に使用する16種類の色に調整します。 そしてフレームバッファの方は、そのカラーマップ番号を指定して間接的に各ピクセルの色をコントロールすることになりますから、深さは4ビット(24=16)でよいことになります。
この場合、640×480ピクセルの画像を表現するためには、カラーマップとフレームバッファを合わせて、
と、約150キロバイト程度のメモリでこと足ります。
カラーマップモデルの場合、表現できる色数は同じ16M色でも、フレームバッファの深さによって、カラーマップの数つまり同時に使用できる色数は様々になります。 しかし普通はバイト単位でデータが処理されることを考慮して、4ビット(24=16色)の深さの「16色カラーモデル(厳密には16M色中16色同時表示カラーモデル)」と、8ビット(28=256色)の深さの「256色カラーモデル(16M色中256色同時表示カラーモデル)」の2種類がよく利用されます。
カラーマップモデルでは、同時に使用したい色数が多いとカラーマップ用メモリの容量が膨大になり、全体のメモリ容量がかえって多くなってしまうことがありますので、通常は256色程度までのモデルに利用されます。 それ以上色数が多い場合には、フルカラーモデルと同じように、フレームバッファがピクセルの色を直接コントロールするモデル(これを「ダイレクトカラーモデル」と呼ぶことがあります)が使用されます。 ただしその場合もバイト単位でデータが処理されることと、3原色ごとのビット数を同じにすることを考慮して、15ビットの深さ(各色5ビット)の「32K色(3万2千色)カラーモデル」と、24ビットの深さのフルカラーモデルの2種類がよく利用されます。
以上をまとめますと、一般的に使用されるビットマップ表現モデルは下表のようになります。
モデル名 | フレームバッファの深さ | 同時表示可能な色数 | カラーマップ数 |
---|---|---|---|
モノクロモデル | 1 | 2 | なし/2(注) |
16色カラーモデル | 4 | 16 | 16 |
256色カラーモデル | 8 | 256 | 256 |
32K色カラーモデル | 15 | 32K | なし |
16M色カラーモデル | 24 | 16M | なし |
ちなみに実際のカラーマップモデルでは、メモリ構造の関係から、フレームバッファの深さとカラーマップの3原色ごとのビット数は多くの場合同じ値になります。 例えばフレームバッファの深さが4ビットの場合は、カラーマップは各原色ごとに4ビットの計12ビットで、「4096(=212)色中16色同時表示カラーモデル」となります。
またフレームバッファが1ビットの場合は、カラーマップがなくてピクセル直接をコントロールするダイレクトカラーモデルと、2つのカラーマップを持つカラーマップモデルの2種類があります。 2つのカラーマップを持つモデルは正確には「2色カラーモデル」と呼ぶべきですが、あまり厳密には区別されていないようです。