我正在尝试解码JPG文件,因此正确读取了整个标头部分。在某个时候读取照片本身(SOS,0xFFDA)的过程中,用于在霍夫曼表中查找对应关系的功能进入无限循环。如果在十六进制编辑器中查看文件,则可以在错误位置找到以下字节序列:
7F FF 00 61
FF 00 => FF
7F FF 61
以二进制代码表示的
0111 1111 1111 1111 0110 0001
过去的MCU已经使用了第一位,现在连续15个“ 1”,然后为零。在相应的霍夫曼表中,最大代码为8个1和一个零。我得出的结论是字节7F直到最后才被填充。但这不是文件的结尾。我该如何确定何时需要跳过一个字节,什么时候不需要?
答案 0 :(得分:1)
解码AC系数的算法不是很清楚。我将循环条件从var newarr = [];
for (var i = 0, l = arr.length; i < l; i++) {
var keys = Object.keys(arr[i]);
for (var j = 0, k = keys.length; j < k; j++) {
newarr.push(arr[i][keys[j]]);
}
}
console.log(newarr)
更改为(index != 63)
,因为EOB冲击了MCU的第64个元素,一切开始起作用。
https://www.w3.org/Graphics/JPEG/itu-t81.pdf(第106页)