首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

哪儿有JPG文件的格式?C++要读写的

2013-07-04 
哪里有JPG文件的格式?C++要读写的.哪里有JPG文件的格式?C++要读写的.[解决办法]没看懂楼主问的问题[解决办

哪里有JPG文件的格式?C++要读写的.
哪里有JPG文件的格式?C++要读写的.
[解决办法]
没看懂楼主问的问题
[解决办法]
JFIF文件格式直接使用JPEG标准爲应用程式定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个位元组组成,其前一个位元组是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充位元组(fill byte)。下面是其中的8个标记:
1.        SOI  0xD8           图像开始 
2.        APP0 0xE0           JFIF应用资料块 
3.        APPn 0xE1 - 0xEF           其他的应用资料块(n, 1~15) 
4.        DQT  0xDB           量化表 
5.        SOF0 0xC0           帧开始 
6.        DHT  0xC4           霍夫曼(Huffman)表 
7.        SOS  0xDA           扫描线开始 
8.        EOI  0xD9           图像结束
爲使读者对JPEG定义的标记一目了然,现将JPEG的标记码列於表6-05,并保留英文解释。
表6-05 JPEG定义的标记
Symbol 
(符号)        Code Assignment
(标记代码)        Deforbiddenion
(说明)
Start Of Frame markers, non-hierarchical Huffman coding
SOF0        0xFFC0        Baseline DCT
SOF1        0xFFC1        Extended sequential DCT
SOF2        0xFFC2        Progressive DCT
SOF3        0xFFC3        Spatial (sequential) lossless 
Start Of Frame markers, hierarchical Huffman coding
SOF5        0xFFC5        Differential sequential DCT
SOF6        0xFFC6        Differential progressive DCT
SOF7        0xFFC7        Differential spatial lossless
Start Of Frame markers, non-hierarchical arithmetic coding
JPG        0xFFC8        Reserved for JPEG extensions
SOF9        0xFFC9        Extended sequential DCT
SOF10        0xFFCA        Progressive DCT
SOF11        0xFFCB        Spatial (sequential) Lossless
Start Of Frame markers, hierarchical arithmetic coding
SOF13        0xFFCD        Differential sequential DCT
SOF14        0xFFCE        Differential progressive DCT


SOF15        0xFFCF        Differential spatial Lossless
Huffman table specification
DHT        0xFFC4        Define Huffman table(s)
arithmetic coding conditioning specification
DAC        0xFFCC        Define arithmetic conditioning table
Restart interval termination
RSTm        0xFFD0~0xFFD7        Restart with modulo 8 counter m
Other marker
SOI        0xFFD8        Start of image
EOI        0xFFD9        End of image
SOS        0xFFDA        Start of scan
DQT        0xFFDB        Define quantization table(s)
DNL        0xFFDC        Define number of lines
DRI        0xFFDD        Define restart interval
DHP        0xFFDE        Define hierarchical progression
EXP        0xFFDF        Expand reference image(s) 
APPn        0xFFE0~0xFFEF        Reserved for application use
JPGn        0xFFF0~0xFFFD        Reserved for JPEG extension
COM        0xFFFE        Comment
Reserved markers
TEM        0xFF01        For temporary use in arithmetic coding
RES        0xFF02~0xFFBF        Reserved

 

JPEG文件由下面的8个部分组成:
(1) 图像开始SOI(Start of Image)标记
(2) APP0标记(Marker)
① APP0长度(length)
② 识别字(identifier)
③ 版本号(version)
④ X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)
⑤ X方向图元密度(X density)
⑥ Y方向图元密度(Y density)
⑦ 缩略图水平图元数目(thumbnail horizontal pixels)
⑧ 缩略图垂直图元数目(thumbnail vertical pixels)
⑨ 缩略图RGB点阵图(thumbnail RGB bitmap)
(3) APPn标记(Markers),其中n=1~15(任选)
① APPn长度(length)
② 由於详细资讯(application specific information)
(4) 一个或者多个量化表DQT(difine quantization table)
① 量化表长度(quantization table length)
② 量化表数目(quantization table number)
③ 量化表(quantization table)
(5) 帧图像开始SOF0(Start of Frame)
① 帧开始长度(start of frame length)
② 精度(precision),每个顔色分量每个图元的位元数(bits per pixel per color component)
③ 图像高度(image height)
④ 图像宽度(image width)
⑤ 顔色分量数(number of color components)
⑥ 对每个顔色分量(for each component)
o        ID 
o        垂直方向的样本因数(vertical sample factor) 


o        水平方向的样本因数(horizontal sample factor) 
o        量化表号(quantization table#)
(6) 一个或者多个霍夫曼表DHT(Difine Huffman Table)
① 霍夫曼表的长度(Huffman table length)
② 类型、AC或者DC(Type, AC or DC)
③ 索引(Index)
④ 位表(bits table)
⑤ 值表(value table)
(7) 扫描开始SOS(Start of Scan)
① 扫描开始长度(start of scan length)
② 顔色分量数(number of color components)
③ 每个顔色分量
o        ID 
o        交流系数表号(AC table #) 
o        直流系数表号(DC table #)
④ 压缩图像资料(compressed image data)
(8) 图像结束EOI(End of Image)
表6-06表示了APP0域的详细结构。有兴趣的读者可通过UltraEdit或者PC TOOLS等工具软体打开一个JPG图像文件,对APP0的结构进行分析和验证。
表6-06 JFIF格式中APP0域的详细结构
偏移        长度        内容        块的名称        说明
0        2 byte        0xFFD8        (Start of Image,SOI)        图像开始
2        2 byte        0xFFE0        APP0(JFIF application segment)        JFIF应用资料块
4        2 bytes                 length of APP0 block        APP0块的长度
6        5 bytes                 "JFIF"+"0"        识别APP0标记
11        1 byte                         主要版本号(如版本1.02中的1)
12        1 byte                         次要版本号(如版本1.02中的02)
13        1 byte                  and Y densities>        X和Y的密度单位
units=0:无单位
units=1:点数/英寸
units=2:点数/厘米
14        2 bytes                         水平方向图元密度
16        2 bytes                         垂直方向图元密度
18        1 byte                         缩略图水平图元数目
19        1 byte                         缩略图垂直图元数目
         3n                 < Thumbnail RGB bitmap>        缩略RGB点阵图(n爲缩略图的图元数)


                           Optional JFIF extension APP0 marker segment(s)        任选的JFIF扩展APP0标记段
         ……                 ……         
         2 byte        0xFFD9        (EOI) end-of-file        图像文件结束标记

////////////////////////////////////////////////////

[解决办法]
推荐使用FreeImage库读写jpg,这个库轻便就一个.h文件,一个.lib,一个.dll文件。使用也超级简单。

如果亲自手写读取jpg文件,那估计你得对jpg的压缩算法非常熟悉了。

读写bmp文件比较简单,因为bmp基本都没有使用压缩算法。
[解决办法]
如果没有特别需要,可以直接用GDI+读取或者IPicture接口,如果要控制写入建议用libjpeg,很多时候你想读一个文件,不要去想着自己去实现格式读取,应该找现成的库,效率肯定高,而且更稳定。
[解决办法]
要学会站在巨人肩膀上。

热点排行