RLEによる圧縮RLEによる圧縮4ビット及び8ビットのBMPファイルで利用可能な圧縮方式であるRLEの解説。Encodingの略で、データの可逆圧縮方式の1つである。同一の値が連続するようなデータの圧縮に効果を発揮する。次の図のようなデータの並びを考える。この説明文を形にしたものがRLEである。上の図のデータは次の図のように圧縮される。上の2つの図からもわかる通り、この例では14バイトの元データが8バイトに圧縮されている。エンコードされており、1バイトから2バイトに増えてしまっている。一般に、あるN個の値が羅列されたデータにRLEを施した場合、最も圧縮効率が良いのは全ての値が同一だった場合であり、エンコード後のデータは最小で2個になる。反対に、最も圧縮効率が悪いのは全ての値が連続していない場合であり、エンコード後のデータはN×2個、即ち元の2倍の量になってしまう。†BMPにおけるRLEでは、上述のようなデータの膨張を軽減するために、絶対モードというものが存在する。絶対モード内のデータはエンコードされずにそのままの形で格納される。次の図のようなデータの並びを考える。このデータに通常のRLEを施すと、次の図のようになる。上の2つの図からもわかる通り、13バイトの元データが16バイトに膨張してしまっている。いう形式の絶対モードを導入する。膨張の原因となっている箇所に対して絶対モードを適用した場合のデータを次の図に示す。絶対モードを導入することで、13バイトの元データが12バイトに圧縮されており、膨張が抑えられたといえる。絶対モードは、3個以上の同一でない値の羅列に対して膨張抑止効果を持つ。†BMPにおけるRLEは、イメージデータの行データ単位で施される。RLEを施す対象となるイメージデータでの行データの格納順は、イメージ表示時に下に来る行ほど最初に格納されるボトムアップ形式でなければならず、トップダウン形式は認められない。BMPにおけるRLEを施されたデータは、以下の5種類の構成要素の集合となる。エンコードデータ絶対モードデータ行データの終わりイメージデータの終わり位置移動情報これら各構成要素は、必ず2バイトの整数倍のサイズ(ワードアラインメント)でなければならない。概要においては値の連続数はバイト単位として解説したが、実際のBMPにおけるRLEでは、値の連続数はピクセル単位である。8ビットBMPでは1ピクセルが1バイトであるため問題ないが、4ビットBMPでは2ピクセルで1バイトなので注意すること。値の連続、不連続の判定はBMPの形式に関係なくバイト単位で行う。以下に各構成要素の詳細を述べる。†エンコードデータとは、RLEそのものが施されたデータのことで、以下の構成要素を持つ。要素バイト数ピクセルの連続数1連続している値1ピクセルの連続数は符号無し整数値で、連続している値のピクセル単位での連続数を示す。8ビットBMPにおいては、エンコードデータは概要で述べたRLEそのものである。なり、それ以上連続している場合は2つ以上のエンコードデータに分割する。4ビットBMPにおいて、例えば、次の図のような8ピクセルの連続したデータを考える。このデータに対してRLEを施すと、次の図のようになる。このように、4ビットBMPにおいては、連続判定はバイト単位で行い、連続数はピクセル単位で書き出す。絶対モードデータとは、文字通り絶対モードが適用されたデータのことで、以下の構成要素を持つ。