在Baseline的Jpeg中,Huffman值是放在DHT中,像云风所说的那样。
例子:
Haffman 表的表头是 0,2,3,1,1,1,0,1,0,0,0,0,0,0,0,0
就是说长度为 1 的代码没有
长度为 2 的代码为 00 01
长度为 3 的代码是 100 101 110
长度为 4 的代码是 1110
长度为 5 的代码是 11110
长度为 6 的代码是 111110
长度为 7 的代码没有 (如果有一个的话应该是 1111110)
长度为 8 的代码是 11111100问题:这些00   01   100  101  110等等是不是有一定的默认规则(除了短长度的不能成为长长度的前缀之外)?如何生成?因为这编码好像不是唯一的。谢谢!

解决方案 »

  1.   

    在压缩编码的时候是按照Huffman树得到Huffman码。比如:
    45 = 00
    57 = 01
    29 = 100
    17 = 101
    23 = 110
    但是在Jpeg中只存放着45 57 29 17 23。应该还存放00 01 100 101 110而且和45 57 29这些有对应关系才对。
    按照楼上的说法是不是它把00 01 100 101 110省略掉了,按照最简二叉树(尽量取小数)从短到长位数,以最小取值为标准就可以得到00 01 100 101 110。是这样吗?3Q
      

  2.   

    JPEG用的是范式HUFFMAN,在计算机中易实现,恢复容易.
    你可以发现在你的例子中,都是在确定位数后,前面的码"+1然后左移生成"后面的码.
      

  3.   

    参考 CxImage 就可以了
    http://www.codeproject.com/bitmap/cximage.asp