[JPEG] 解码参考资料 & 注意事项

README 中有对应的 C++ 实现

截止至22年3月20号,其 C++ 实现对应的 APP0 处理是错误的,请注意

直接拖到文章尾部,可以看到一维 IDCT 的公式

还有一些细节是以上教程没有强调或者没有提到的,同时其他教程也没有提及甚至是错误的地方:

  • jpg 是按大端模式储存数据的
  • 按比特读取压缩流要从高位(靠近符号位的地方)向低位读取
    • 顺带一提,gif 按比特读取压缩流是从低位开始读的
  • 如果读取到的哈夫曼码对应的需要继续读取的位数为0位,则视为读取到的数字是0
    • 这个会在读取直流变量的时候遇到
    • 另外读取交流变量的时候会遇到权值为0xF0的情况,上文教程说这个是连续写入16个0的意思。其实也可以理解为写入15个0,再读取0位数字
  • 颜色分量是按Y、Cb、Cr排布的,别搞反了