画像のデータはどの様に保存されているの?


<ディジタル化の仕組み>

画像ファイルの16進数表示  画像のデータもコンピュータ上では数値に変換されて、保存されています。右側の図は、ビットマップ形式で保存された画像ファイルを16進数で表示させたものです。88 08 88 06 86・・・というように、数字が並んでいます。この数値が、画像を表しているのです。
 それでは、この数値が何を意味するのでしょうか。コンピュータで、画像を表現する(ディジタル化)には、画像を細かい点に分割します。そのひとつひとつの点をピクセルとよんでいます。そのピクセルごとの色を数値に直して、画像データとし、ファイルに保存されています。つまり、この数値は、画像の色を表していたのです。
 さらに、画像ファイルには、各種の保存形式、ファイルのサイズ、画像データの開始アドレス、縦横のサイズ、色数があります。それを表すために、ヘッダとよばれる部分が画像データの前に付加されて、画像ファイルは保存されています。(ビットマップ形式(16色)の詳しいファイル形式



<ビットマップ形式の白黒画像>

ビットマップ形式(白黒)  白黒の画像は、白か黒の2色しかありませんから、白が1、黒が0というように、1ビットで色が表現できます。つまり、1ビットの情報量で1ピクセル、1バイトで8ピクセルのデータを表現できます。
 右の画像は、ビットマップ形式で白黒の画像です。横×縦が320×240で、76,800ピクセルの画像です。このファイルのサイズは、9,662 バイト(右の画像を保存して、確認してください。)です。
この内訳は、
です。



<ビットマップ形式のフルカラー画像>

ビットマップ形式(フルカラー)  フルカラーの画像とは、約1677万色(16,777,216色)の色が使用可能な形式のことです。色を表現するのに、光の三原色を組み合わせ、000000〜FFFFFF(16進数)の数値で色を表現しています(詳しくは、なぜ、フルカラーで表示できる色は、1677万色なの?を参照)。1色を表現するのに、3バイトの情報量が必要になります。
 右の画像は、ビットマップ形式でフルカラーの画像です。横×縦が320×240で、76,800ピクセルの画像です。このファイルのサイズは、230,454 バイト(右の画像を保存して、確認してください。)です。かなり、大きなファイルサイズですので表示されるのに随分と時間がかかったのではないのでしょうか。
 この内訳は、
です。



<カラーパレット>

 上記のフルカラーの画像は、各ピクセルの色を指定するのに3バイト必要となり、ファイルサイズが大きくなる。それを解消するために、カラーパレットを用いる方法が考案されている。
 フルカラーの1677万色から使用可能な何色かを選んだパレットとよばれるものを用意する。そのパレットにパレット番号とよばれる番号をつけて、その番号で色を指定する方法である。
 16色のパレットを使用する場合、1667万色から16色を選び、0〜15までのパレット番号にその数値を割り当てる。例えば、パレット番号の0を赤(FF0000)、・・・、パレット番号の15を白(FFFFFF)というように割り振りをする。各ピクセルの色をこのパレット番号で表現するのです。そうすると16色のパレットの場合、番号0〜15(16進数で0〜F)なので、1色を表現するのに、1/2バイトの情報量になります。フルカラーの場合と比較して1/6の情報量にすることができます。
 では、次の項目で確認してみましょう。


<ビットマップ形式の16色画像>

ビットマップ形式(16色)  右の画像は、ビットマップ形式で16色の画像です。横×縦が320×240で、76,800ピクセルの画像です。このファイルのサイズは、38,518 バイト(右の画像を保存して、確認してください。)です。
 この内訳は、
です。
 ここでフルカラーの場合と比べると、画像データのサイズが1/6になっていることを確かめてください。しかし、ヘッダ等のサイズが54バイト(フルカラー)から118バイトに増加しています。この増加分の64バイト(=118−54)が、パレットのデータになります。各パレット番号に対応する色の数値を4バイトに直して(例えば、FFFFFFが00FFFFFFというように)、保存されています。したがって、64バイト(=16色×4バイト)だけ、ヘッダが大きくなります。


<ビットマップ形式の256色画像>

ビットマップ形式(256色)  右の画像は、ビットマップ形式で256色の画像です。横×縦が320×240で、76,800ピクセルの画像です。ここまでの知識があれば、この場合のファイルサイズを計算することができます。求めてください。以下は、その計算例です。

このファイルのサイズは、77,878 バイト(右の画像を保存して、確認してください。)です。
 この内訳を考えてみましょう。
 256色ということは、パレット番号が0〜255です。16進数にすると00〜FFです。つまり、各ピクセルの色を表すのに1バイトの情報量が必要なわけです。
 では、この場合の画像データのサイズは、
となります。  次に、パレットのサイズは、
となります。
よって、ヘッダ等のサイズが
です。
 以上より、ファイルサイズは、
となります。