Switched Run Length Encoding
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/13 20:51 UTC 版)
「連長圧縮」の記事における「Switched Run Length Encoding」の解説
しかし、PackBitsでは、データの長さを表す符号が連続するデータの長さのものであるか連続しないデータの長さのものであるかをその正負によって判別しているので、表現できるデータの長さが半分までになる。データの長さには通常1バイトを割り当てるので、PackBitsで表現できるデータの長さは128までとなる。通常はそこまで連続することはなかなかないが、色数の少ない画像などでは十分に考え得る。この対策として、コードの変わり目で連続データとして扱うか非連続データとして扱うかを交互に切り替えていくSwitched Run Length Encodingがある。 データ「A B C D E E E E F F F F F F F」を例として、圧縮の方法を解説する。 まずは非連続データとして扱い、PackBits同様に連続したデータが現れるまでの長さを記録し、その後ろに非連続データをそのまま出力するA B C D E E E E F F F F F F F→5 A B C D E 連続したデータに出会ったら、次に連続しないデータに出会うまでの長さを記録するA B C D E E E E F F F F F F F→5 A B C D E 3 再度、連続したデータが現れるまでの長さを記録し、その後ろに非連続データをそのまま出力するA B C D E E E E F F F F F F F→5 A B C D E 3 1 F 2と3をデータの末尾まで交互に繰り返していくA B C D E E E E F F F F F F F→5 A B C D E 3 1 F 6 また、復号の方法は以下のようになる。 まずは非連続データとして扱い、最初の1文字を読み込んで長さを求めた後、後ろに続く非連続データをそのまま出力する5 A B C D E 3 1 F 6 → A B C D E 復号し終えたら連続データとして扱うように切り替え、1文字だけ読み込んで連続する長さを求めた後、復号した最後の文字をその長さだけ繰り返し出力する。5 A B C D E 3 1 F 6 → A B C D E E E E 再度非連続データとして扱い、1文字読み込んで長さを求めた後、続く非連続データをそのまま出力する5 A B C D E 3 1 F 6 → A B C D E E E E F 2と3をデータの末尾まで交互に繰り返していく5 A B C D E 3 1 F 6 → A B C D E E E E F F F F F F F PackBitsとは違い、フラグビットが必要ないため、Switched Run Length Encodingでは256程度までの長さを表現できる。
※この「Switched Run Length Encoding」の解説は、「連長圧縮」の解説の一部です。
「Switched Run Length Encoding」を含む「連長圧縮」の記事については、「連長圧縮」の概要を参照ください。
- Switched Run Length Encodingのページへのリンク