Perl でビットを変更した後、ビットをビットストリームに再パックするにはどうすればよいですか?
私は現在、以下を使用して解凍しています。
my $bits = 5;
my $code = '';
foreach my $i (reverse 0..$bits-1) {
$code <<= 1;
$code |= vec($data,$i,1);
}
たとえば、出力は 16 になる場合があります。
編集:
この質問は、GIF 画像のデータ ブロックに関するものです。
私がやろうとしているのは、LZW コードをパディングして、PDF のLZWDecode
方法で必要な長さに合わせることです。
LZWDecode
<Clear>
は、コードが 256 で<End>
コードが 257の8 ビット イメージを予期します ( PDF リファレンス、44 ページ)。
5 ビット イメージの場合、コード 0 ~ 31 はイメージのグローバル カラー テーブルの色にマップされ、<Clear>
32 と<End>
33 です。
したがって、コード 0 ~ 31 は同じままで、32+ は 256 ~ 32 だけオフセットされるように、ビットストリームを再パックする必要があります。
Windows 用の ActiveState Perl を使用しています。