以下块由霍夫曼块标记嵌套
-HUFF---------------------------------------------------------------------0084-
10 0 1 2 4 3 4 6 5 6 8 a 9 4 2 3
0 1 2 11 0 3 4 21 5 12 31 6 41 51 61 13
22 71 81 91 a1 14 32 b1 d1 f0 15 23 35 42 b2 c1
7 16 24 33 52 72 73 e1 25 34 43 53 62 74 82 94
a2 f1 26 44 54 63 64 92 93 c2 d2 55 56 84 b3 45
83 46 a3 e2
-------------------------------------------------------------------------------
0084 是表的整数长度,不包含在此处的块中
根据 JPEG 标准,第一个地址显然使其成为目标 0 (0x10) 处的 AC 表
显然从那里开始它是一张哈夫曼表。
那么,它是如何解码的呢?
0x10 之后的接下来的 16 个字节告诉您每个长度有多少个代码。在您的示例中,有 0 个长度为 1 位的代码、1 个长度为 2 位的代码、2 个长度为 3 位的代码、4 个长度为 4 位的代码、3 个长度为 5 位的代码,依此类推。
然后按顺序跟随这些代码编码的值。再次从你的例子来看:
Code length | Number | Symbol(s)
------------+--------+----------
1 bit | 0 |
2 bits | 1 | 0x01
3 bits | 2 | 0x02 0x11
4 bits | 4 | 0x00 0x03 0x04 0x21
5 bits | 3 | 0x05 0x12 0x31
... etc
然后从上到下构建一棵二叉树,按顺序分配符号。在此示例中,您将得到:
Symbol | Code
-------+------
0x01 | 00
0x02 | 010
0x11 | 011
0x00 | 1000
0x03 | 1001
0x04 | 1010
0x21 | 1011
...etc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)