2字节,为JFIF版本号,可为0x0101或者0x0102; 4)X和Y的密度单位
1字节,units=0:无单位;units=1:点数/英寸;units=2:点数/厘米; 5)X方向像素密度(X density) 2字节,表示水平分辨率; 6)Y方向像素密度(Y density) 2字节,表示垂直分辨率;
7)缩略图水平像素数目(thumbnail horizontal pixels) 1字节,表示缩略图水平像素数目;
8)缩略图垂直像素数目(thumbnail vertical pixels) 1字节,表示缩略图垂直像素数目;
9)缩略图RGB位图(thumbnail RGB bitmap) 3字节,表示缩略图RGB位图;
c)APPn标记(Markers)其中n=1~15(任选) 1)APPn长度(length)
2)应用详细信息(application specific information) d)一个或者多个量化表DQT(difine quantization table) 1)量化表长度(quantization table length)
2字节,DQT标记码长度,不包括前两个字节0xFF与0xDB; 2)量化表数目(quantization table number)
(Pq,Tq)1字节,它的高4位Pq为量化表的数据精确度,Pq=0时,Q0~Qn的值为8bit,Pq=1时,Qt的值为16bit;Tq表示量化表的编号,为0~3。在基本系统中,Pq=0,Tq=0~1,也就是说最多有两个量化表;
3)量化表(quantization table)
Q0共1或2个字节,为量化表的值,Pq=0时;为1个字节,Pq=1时,为2个字节。
Q1共1或2个字节,为量化表的值,Pq=0时;为1个字节,Pq=1时,为2个字节。
????
Qn共1或2个字节,为量化表的值,Pq=0时;为1个字节,Pq=1时,为2个字
24
节。
n的值为0~63,表示量化表中64个值(之字形排列); e)帧图像开始SOF(Start Of Frame) 1)帧开始长度(start of frame length)
2字节,SOF标记码长度,不包括前两个字节0XFF与0XC0;
2)精度(precision),每个颜色分量每个像素的位数(bits per pixel per color component) 1字节,基本系统中,为0X08 3)图像高度(image height) 2字节;
4)图像宽度(image width) 2字节;
5)颜色分量数(number of color components)
1字节,Frame中的成分个数,一般为1或3,1代表灰度图,3代表真彩图; 6)对每个颜色分量(for each component) ID 成分编号,1字节
垂直方向的样本因子(vertical sample factor) 水平方向的样本因子(horizontal sample factor) 量化表号(quantization table#)
f)一个或者多个哈夫曼表DHT(Difine Huffman Table) 1)哈夫曼表的长度(Huffman table length) 2)类型、AC或者DC(Type,AC or DC) 3)索引(Index) 4)位表(bits table) 5)值表(value table) 其编码格式如表2-13所示。
Tc为高4bit,Th为低4bit。在基本系统中,Tc为0或1,为0时,指DC所用的Huffman表,为1时,指AC所用的Huffman表。TH表示Huffman表的编号,在基本系统中,其值为0或1。所以,在基本系统中,最多有4个Huffman表。
表2-13 哈夫曼表
标记结构
字节数 25
备注 0XFF 0XC4 Length 1 1 2 DHT标记码长度,不包括前两个字节0xFF,0xC4 (Tc , Th) L1 L2 ?? L16 V1 V2 ?? Vt 1 1 1 ?? 1 1 1 ?? 1 Ln表示每个nbit的Huffman码字个数,n=1~16。
Vt表示每个Huffman码字所对应的值,也就是我们前面所讲的符号1,对DC来说该值为(Size),对于AC来说该值为(RunLength,Size)。
t=L1+L2+…+L16
g)扫描开始SOS(Start of Scan) 1)扫描开始长度 (Start of Scan Length) 2)颜色分量数 (Number of Color Components) 3)每个颜色分量 ID
交流系数表号(AC table#) 直流系数表号(DC table#)
4)压缩图像数据(Compressed Image Data) 其编码格式如表2-14所示。
表2-14 缩略图像数据的编码格式
标记结构 0XFF
字节数 1 26
备注 0XDA Ls 1 2 DHT标记码长度,不包括前两个字节0xFF,0xDA Ns Cs1 (Td1,Ta1) Cs2 (Td2,Ta2) ?? CsNs (TdNs , TaNs) Ss Se (Ah Al) , 1 1 1 1 1 ?? 1 1 1 1 1 Ns为Scan中成分的个数,在基本系统中,Ns=Nf(Frame中成分个数)。CSNs为在Scan中成分的编号。TdNs为高4bit,TaNs为低4bit,分别表示DC和AC编码表的编号。在基本系统中Ss=0,Se=63,Ah=0,Al=0。
h)图像结束EOI(End of Image) 一个比较形象的图解如图2-13所示。
27
图2.13 JPEG格式文件图解
在JPEG图像编码中,我们还经常提到MCU,它表示最小编码单元,即Minimum Coding Unit,实际的编码,都是以一个一个MCU为单位进行的。在前面的介绍中,曾提到Y分量数据重要,U、V分量的数据相对不重要,所以可以只取U、V的一部分,以增加压缩比。目前支持JPEG格式的软件通常提供两种取样方式YUV411和YUV422,其含义是YUV3个分量的数据取样比例。举例来说,如果Y取4个数据单元,即水平取样因子Hy乘以垂直取样因子Vy的值为4,而U和V各取一个数据单元,即Hu×Vu=1,Hu×Vv=1。那么这种部分取样就称为YUV411。[6] 2.7. Bmp文件格式
BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图像文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP图像文件与显示设备无关,因此把这种BMP图像文件格式称为设备无关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,像BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式保存),目的是为了让Windows能够在任何类型的显示设备上显示所存储的图像。BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
文件结构
28