图片数据
解码过程
1.开始标记
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 01 00 01 00 00
这部分是图片的开始,包含SOI,start of image(FF D8),JFIF,版本号之类的,这部分对后面解压没什么作用,这里不做介绍
2.量化表
地址:0x00000014
数据:FF DB 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0A 0C 14 0D 0C 0B 0B 0C 19 12 13 0F 14 1D 1A 1F 1E 1D 1A 1C 1C 20 24 2E 27 20 22 2C 23 1C 1C 28 37 29 2C 30 31 34 34 34 1F 27 39 3D 38 32 3C 2E 33 34 32
解析:
(1) FF DB 量化表(QT)的标识
(2)00 43 QT的长度:67
(3)00 QT信息,高4位:0,QT精度为8位,否则16位;
低4位:0,QT号,有两张QT,亮度和色度
(4)64字节数据为8*8的QT内容,从左上角往右下角排列
16进制:
十进制:
图像信息
地址:0x0000009E
数据:FF C0 00 11 08 00 95 00 E3 03 01 22 00 02 11 01 03 11 01
解析:
(1)FF C0 start of frame 0起始标识
(2)00 11 数据长度为17
(3)08 数据精度,表示每个颜色每个像素的位数,通常是8
(4)00 95 图片高度:149
(5)00 E3 图片宽度:227
(6)03 通道数(component),灰度图为1,YCbCr/YIQ彩色图是3,CNWK彩色图是4
(7)01 22 00
02 11 01
03 11 01
(7)是每个通道的参数,这里有3组,每组3个字节:第1个字节01是component ID,第2个字节0-3bit是垂直采样系数,4-7bit是水平采样系数,第3个字节00量化表编号
Haffman表
生成规则:
(a)第一个编码的数字必定为0;如果第一个编码的位数为1,就被编码为0;如果第一个编码的位数为2,就被编码为00;如果第一个编码的位数为3,就被编码为000。
(b)从第二个编码开始,如果它和它前面编码具有相同的位数,则当前编码是它前面的编码加1;如果它的编码位数比它前面的编码位数大,则当前编码时它前面的编码加1之后再在后面添加若干个0,直到满足编码位数的长度为止。
地址:0x000000B1
数据:FF C4 00 1F 00 00 01 05 01 01 01 01 01 01 00 00 00 00 00 00 00 00 01 02 03 04 05 06 07 08 09 0A 0B
解析:
- FF C4 Haffman表起始标识
- 00 1F 数据长度为31
- 00 表示第一个DHT表,类型为DC,ID为0,低4位是 HT ID 号,第5位是 HT 表类型标记,再高三位是为0
- 后面的16个字节数据表示每个编码组中有几个代码,然后是对应保存的值
组号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
个数 |
00 |
01 |
05 |
01 |
01 |
01 |
01 |
01 |
01 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
即Haffman表为:
序号 |
码字长度 |
码字(二进制) |
权值(数据位数) |
0 |
2 |
00 |
0 |
1 |
3 |
010 |
1 |
2 |
3 |
011 |
2 |
3 |
3 |
100 |
3 |
4 |
3 |
101 |
4 |
5 |
3 |
110 |
5 |
6 |
4 |
1110 |
6 |
7 |
5 |
11110 |
7 |
8 |
6 |
111110 |
8 |
9 |
7 |
1111110 |
9 |
10 |
8 |
11111110 |
10 |
11 |
9 |
111111110 |
11 |
地址:0x000000D2
数据:FF C4 00 B5 10 00 02 01 03 03 02 04 03 05 05 04 04 00 00 01 7D 01 02 03 00 04 11 05 12 21 31 41 06 13 51 61 07 22 71 14 32 81 91 A1 08 23 42 B1 C1 15 52 D1 F0 24 33 62 72 82 09 0A 16 17 18 19 1A 25 26 27 28 29 2A 34 35 36 37 38 39 3A 43 44 45 46 47 48 49 4A 53 54 55 56 57 58 59 5A 63 64 65 66 67 68 69 6A 73 74 75 76 77 78 79 7A 83 84 85 86 87 88 89 8A 92 93 94 95 96 97 98 99 9A A2 A3 A4 A5 A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2 E3 E4 E5 E6 E7 E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8 F9 FA
(1)FF C4 Haffman表起始标识
(2)00 B5 数据长度为181
(3)10 表示第一个DHT表,类型为AC,ID为0,低4位是 HT ID 号,第5位是 HT 表类型标记,再高三位是为0
(4)后面的16个字节数据表示每个编码组中有几个代码,然后是对应保存的值
组号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
个数 |
00 |
02 |
01 |
03 |
03 |
02 |
04 |
03 |
05 |
05 |
04 |
04 |
00 |
00 |
01 |
7D |
|
0 |
2 |
1 |
3 |
3 |
2 |
4 |
3 |
5 |
5 |
4 |
4 |
0 |
0 |
1 |
125 |
即Haffman表为:
序号 |
码字长度 |
码字(二进制) |
权值(数据位数)(16进制) |
0 |
2 |
00 |
01 |
1 |
2 |
01 |
02 |
2 |
3 |
100 |
03 |
3 |
4 |
1010 |
00 |
4 |
4 |
1011 |
04 |
5 |
4 |
1100 |
11 |
6 |
5 |
11010 |
05 |
7 |
5 |
11011 |
12 |
8 |
5 |
11100 |
21 |
9 |
6 |
111010 |
31 |
10 |
6 |
111011 |
41 |
11 |
7 |
1111000 |
06 |
12 |
7 |
1111001 |
13 |
13 |
7 |
1111010 |
51 |
14 |
7 |
1111011 |
61 |
15 |
8 |
11111000 |
07 |
16 |
8 |
11111001 |
22 |
17 |
8 |
11111010 |
71 |
18 |
9 |
111110110 |
14 |
19 |
9 |
111110111 |
32 |
20 |
9 |
111111000 |
81 |
21 |
9 |
111111001 |
91 |
22 |
9 |
111111010 |
A1 |
23 |
10 |
1111110110 |
08 |
24 |
10 |
1111110111 |
23 |
25 |
10 |
1111111000 |
42 |
26 |
10 |
1111111001 |
B1 |
27 |
10 |
1111111010 |
C1 |
28 |
11 |
11111110110 |
15 |
29 |
11 |
11111110111 |
52 |
30 |
11 |
11111111000 |
D1 |
31 |
11 |
11111111001 |
F0 |
32 |
12 |
111111110100 |
24 |
33 |
12 |
111111110101 |
33 |
34 |
12 |
111111110110 |
62 |
35 |
12 |
111111110111 |
72 |
36 |
15 |
111111111000000 |
82 |
37 |
16 |
1111111110000010 |
09 |
38 |
16 |
1111111110000011 |
0A |
39 |
16 |
1111111110000100 |
16 |
40 |
16 |
1111111110000101 |
17 |
41 |
16 |
1111111110000110 |
18 |
42 |
16 |
1111111110000111 |
19 |
43 |
16 |
1111111110001000 |
1A |
44 |
16 |
1111111110001001 |
25 |
45 |
16 |
1111111110001010 |
26 |
46 |
16 |
1111111110001011 |
27 |
47 |
16 |
1111111110001100 |
28 |
48 |
16 |
1111111110001101 |
29 |
49 |
16 |
1111111110001110 |
2A |
50 |
16 |
1111111110001111 |
34 |
51 |
16 |
1111111110010000 |
35 |
52 |
16 |
1111111110010001 |
36 |
53 |
16 |
1111111110010010 |
37 |
54 |
16 |
1111111110010011 |
38 |
55 |
16 |
|
39 |
56 |
16 |
|
3A |
57 |
16 |
|
43 |
58 |
16 |
|
44 |
59 |
16 |
|
45 |
60 |
16 |
|
46 |
61 |
16 |
|
47 |
62 |
16 |
|
48 |
63 |
16 |
|
49 |
64 |
16 |
|
4A |
65 |
16 |
|
53 |
66 |
16 |
|
54 |
67 |
16 |
|
55 |
68 |
16 |
|
56 |
69 |
16 |
|
57 |
70 |
16 |
|
58 |
71 |
16 |
|
59 |
72 |
16 |
|
5A |
73 |
16 |
|
63 |
74 |
16 |
|
64 |
75 |
16 |
|
65 |
76 |
16 |
|
66 |
77 |
16 |
|
67 |
78 |
16 |
|
68 |
79 |
16 |
|
69 |
80 |
16 |
|
6A |
81 |
16 |
|
73 |
82 |
16 |
|
74 |
83 |
16 |
|
75 |
84 |
16 |
|
76 |
85 |
16 |
|
77 |
86 |
16 |
|
78 |
87 |
16 |
|
79 |
88 |
16 |
|
7A |
89 |
16 |
|
83 |
90 |
16 |
|
84 |
91 |
16 |
|
85 |
92 |
16 |
|
86 |
93 |
16 |
|
87 |
94 |
16 |
|
88 |
95 |
16 |
|
89 |
96 |
16 |
|
8A |
97 |
16 |
|
92 |
98 |
16 |
|
93 |
99 |
16 |
|
94 |
100 |
16 |
|
95 |
101 |
16 |
|
96 |
102 |
16 |
|
97 |
103 |
16 |
|
98 |
104 |
16 |
|
99 |
105 |
16 |
|
9A |
106 |
16 |
|
A2 |
107 |
16 |
|
A3 |
108 |
16 |
|
A4 |
109 |
16 |
|
A5 |
110 |
16 |
|
A6 |
111 |
16 |
|
A7 |
112 |
16 |
|
A8 |
113 |
16 |
|
A9 |
114 |
16 |
|
AA |
115 |
16 |
|
B2 |
116 |
16 |
|
B3 |
117 |
16 |
|
B4 |
118 |
16 |
|
B5 |
119 |
16 |
|
B6 |
120 |
16 |
|
B7 |
121 |
16 |
|
B8 |
122 |
16 |
|
B9 |
123 |
16 |
|
BA |
124 |
16 |
|
C2 |
125 |
16 |
|
C3 |
126 |
16 |
|
C4 |
127 |
16 |
|
C5 |
128 |
16 |
|
C6 |
129 |
16 |
|
C7 |
130 |
16 |
|
C8 |
131 |
16 |
|
C9 |