用户操作
[即时聊天] [发私信] [加为好友]
astroheroID:astrohero
17936次访问,排名6994,好友0人,关注者1人。
astrohero的文章
原创 0 篇
翻译 0 篇
转载 17 篇
评论 2 篇
astrohero的公告
浅显易懂的IT入门知识!
最近评论
lbq1221119:呵呵 这篇文章老了 ^_^
vicar:好 正好需要~~ 谢
文章分类
收藏
    相册
    我的好友
    universefighter(原创blog)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 JPG文件格式收藏

    新一篇: 8088 汇编速查手册 | 旧一篇: Windows CE下的串口通讯类

    JPEG的文件格式

    JPEG文件大体上可以分成以下两个部分:标记码(Tag)加压缩数据。先介绍标记码部分。

    标记码部分给出了JPEG图象的所有信息(有点类似于BMP中的头信息,但要复杂的多),如图象的宽、高、Huffman表、量化表等等。标记码有很多,但绝大多数的JPEG文件只包含几种。标记码的结构为:

    SOI

    DQT

                 DRI

                        SOF0

                               DHT

                                      SOS

                                     

                                      EOI

    标记码由两个字节组成,高字节为0XFF,每个标记码之前可以填上个数不限的填充字节0XFF

    下面介绍一些常用的标记码的结构及其含义。

    (1)SOI(Start of Image)

    标记结构      字节数

    0XFF             1

    0XD8             1

    可作为JPEG格式的判据(JFIF还需要APP0的配合)

    (2)APP0(Application)

    标记结构       字节数    意义

    0XFF             1

    0XE0             1

    Lp                 2            APP0标记码长度,不包括前两个字节0XFF0XE0

    Identifier 5            JFIF识别码 0X4A0X460X490X460X00

    Version           2            JFIF版本号 可为0X0101或者0X0102

    Units              1            单位,等于零时表示未指定,为1表示英寸,为2表示

    厘米

    Xdensity  2            水平分辨率

    Ydensity  2            垂直分辨率

    Xthumbnail     1            水平点数

    Ythumbnail     1            垂直点数

    RGB0             3            RGB的值

    RGB1             3            RGB的值

    RGBn             3            RGB的值,n=Xthumbnail*Ythumbnail

    APP0JPEG保留给Application所使用的标记码,而JFIF将文件的相关信息定义在此标记中。

    (3)DQT(Define Quantization Table)

    标记结构       字节数    意义

    0XFF             1

    0XDB            1

    Lq                 2            DQT标记码长度,不包括前两个字节0XFF0XDB

    (Pq,Tq)          1            高四位Pq为量化表的数据精确度,Pq=0时,Q0~Qn

    值为8位,Pq=1时,Qt的值为16位,Tq表示量化表的

    编号,为0~3。在基本系统中,Pq=0Tq=0~1,也就是

    说最多有两个量化表。

    Q0                 12      量化表的值,Pq=0时;为一个字节,Pq=1时,为两个

    字节

    Q1                 12      量化表的值,Pq=0时;为一个字节,Pq=1时,为两个

    字节

    Qn                 12      量化表的值,Pq=0时,为一个字节;Pq=1时,为两个

    字节。n的值为0~63,表示量化表中64个值(之字形排

    )

    (4)DRI(Define Restart Interval)

    此标记需要用到最小编码单元(MCUMinimum Coding Unit)的概念。前面提到,Y分量数据重要,UV分量的数据相对不重要,所以可以只取UV的一部分,以增加压缩比。目前支持JPEG格式的软件通常提供两种取样方式YUV411YUV422,其含义是YUV三个分量的数据取样比例。举例来说,如果Y取四个数据单元,即水平取样因子Hy乘以垂直取样因子Vy的值为4,而UV各取一个数据单元,即Hu×Vu=1,Hv×Vv=1。那么这种部分取样就称为YUV411。如图9.7所示:

    9.7     YUV411的示意图

    9.8     YUV111的排列顺序

    易知YUV41150%的压缩比(原来有12个数据单元,现在有6个数据单元)YUV42233%的压缩比(原来有12个数据单元,现在有8个数据单元)

    那么你可能会想,YUV911YUV1611压缩比不是更高嘛?但是要考虑到图象质量的因素。所以JPEG标准规定了最小编码单元MCU,要求Hy×Vy+Hu×Vu+Hv×Vv10

    MCU中块的排列方式与HV的值有密切关系,如图9.8、图9.9、图9.10所示。

    9.9     YUV211的排列顺序

    9.10   YUV411的排列顺序

    标记结构       字节数    意义

    0XFF             1

    0XDD            1

    Lr                  2            DRI标记码长度,不包括前两个字节0XFF0XDD

    Ri                 2            重入间隔的MCU个数,Ri必须是一MCU行中MCU

    个数的整数,最后一个零头不一定刚好是RiMCU

    每个重入间隔各自独立编码。

    (5)SOF(Start of Frame) 在基本系统中,只处理SOF0

    标记结构       字节数    意义

    0XFF             1

    0XC0             1

    Lf                  2            SOF标记码长度,不包括前两个字节0XFF0XC0

    P                   1            基本系统中,为0X08

    Y                   2            图象高度

    X                   2            图象宽度

    Nf                 1            Frame中的成分个数,一般为131代表灰度图,3

    代表真彩图

    C1                 1            成分编号1

    (H1,V1)   1            第一个水平和垂直采样因子

    Tq1        1            该量化表编号

    C2                 1            成分编号2

    (H2,V2)   1            第二个水平和垂直采样因子

    Tq2        1            该量化表编号

    Cn                 1            成分编号n

    (Hn,Vn)   1            n个水平和垂直采样因子

    Tqn        1            该量化表编号

    (6)DHT(Define Huffman Table)

    标记结构       字节数    意义

    0XFF             1

    0XC4             1

    Lh                 2            DHT标记码长度,不包括前两个字节0XFF0XC4

    (Tc,Th)          1           

    L1                 1

    L2                 1

    …                 

    L16         1

    V1                 1

    V2                 1

    Vt                  1

    Tc为高4位,Th为低4位。在基本系统中,Tc01,为0时,指DC所用的Huffman表,为1时,指AC所用的Huffman表。Th表示Huffman表的编号,在基本系统中,其值为01。所以,在基本系统中,最多有4Huffman表,如下所示:

    Tc   Th   Huffman表编号(2×Tc+Th)

    0     0

    1     1

    0     2

    1     1     3

    Ln表示每个n比特的Huffman码字的个数,n=1~16

    Vt表示每个Huffman码字所对应的值,也就是我们前面所讲的符号1,对DC来说该值为(Size),对AC来说该值为(RunLengthSize)

    t=L1+L2+…L16

    (7)SOS(Start of Scan)

    标记结构       字节数    意义

    0XFF             1

    0XDA            1

    Ls                  2            DHT标记码长度,不包括前两个字节0XFF0XDA

    Ns                 1

    Cs1         1

    (Td1,Ta1)       1

    Cs2         1

    (Td2,Ta2)       1

    CsNs             1

    (TdNs,TaNs)  1

    Ss                  1

    Se                  1

    (AhAl) 1

    NsScan中成分的个数,在基本系统中,Ns=Nf(Frame中成分个数)CSNs为在Scan中成分的编号。TdNs为高4位,TaNs为低4位,分别表示DCAC编码表的编号。在基本系统中Ss=0Se=63Ah=0Al=0

    (8)EOI(End of Image)   结束标志

    标记结构       字节数    意义

    0XFF             1

    0XD9             1

    发表于 @ 2006年04月25日 22:11:00|评论(loading...)|编辑

    新一篇: 8088 汇编速查手册 | 旧一篇: Windows CE下的串口通讯类

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © astrohero