連長圧縮
しかし、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