JPG數(shù)據(jù)結(jié)構(gòu)及與bmp的轉(zhuǎn)換代碼_第1頁(yè)
JPG數(shù)據(jù)結(jié)構(gòu)及與bmp的轉(zhuǎn)換代碼_第2頁(yè)
JPG數(shù)據(jù)結(jié)構(gòu)及與bmp的轉(zhuǎn)換代碼_第3頁(yè)
JPG數(shù)據(jù)結(jié)構(gòu)及與bmp的轉(zhuǎn)換代碼_第4頁(yè)
JPG數(shù)據(jù)結(jié)構(gòu)及與bmp的轉(zhuǎn)換代碼_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

JPEG文件數(shù)據(jù)結(jié)構(gòu)和將位圖保留為JPG的代碼一、簡(jiǎn)述JPEGJPEG及JPEG2000三種:①標(biāo)準(zhǔn)24最高級(jí)別的緊縮,只是,這種緊縮是有損耗的。此類型圖片在網(wǎng)頁(yè)下載時(shí)只能由上而下依序顯示圖片,直到圖片資料全數(shù)下載完畢,才能看到全貌。②漸進(jìn)式JPEG:漸進(jìn)式JPG為標(biāo)準(zhǔn)JPG的改良格式,支持交織,能夠在網(wǎng)頁(yè)下載時(shí),先呈現(xiàn)出圖片的粗略外觀后,再慢慢地呈現(xiàn)出完整的內(nèi)容,漸進(jìn)式JPG的文件比標(biāo)準(zhǔn)JPG的文件要來(lái)得小。③JPEG2000:新一代的影像緊縮法,緊縮品質(zhì)更好,其緊縮率比標(biāo)準(zhǔn)JPEG高約30%左右,同時(shí)支持有損和無(wú)損緊縮。一個(gè)極為重要的特點(diǎn)在于它能實(shí)現(xiàn)漸進(jìn)傳輸,即先傳輸圖像的輪廓,然后慢慢傳輸數(shù)據(jù),讓圖像由朦朧到清楚顯示。以一幅24位彩色圖像為例,JPEG的緊縮分為四個(gè)步驟:①顏色轉(zhuǎn)換:在將彩色圖像進(jìn)行緊縮之前,必需先對(duì)顏色模式進(jìn)行數(shù)據(jù)轉(zhuǎn)換。轉(zhuǎn)換完成以后還需要進(jìn)行數(shù)據(jù)采樣。②DCT變換:是將圖像信號(hào)在頻率域上進(jìn)行變換,分離出高頻和低頻信息的處置進(jìn)程,然后再對(duì)圖像的高頻部份(即圖像細(xì)節(jié))進(jìn)行緊縮。第一以象素為單位將圖像劃分為多個(gè)8×8的矩陣,然后對(duì)每一個(gè)矩陣作DCT8×8的象素矩陣變成8×8的頻率系數(shù)矩陣(所謂頻率確實(shí)是顏色改變的速度),頻率系數(shù)都是浮點(diǎn)數(shù)。③量化:由于下面第四步編碼進(jìn)程中利用的碼本都是整數(shù),因此要對(duì)頻率系數(shù)進(jìn)行量化,將之轉(zhuǎn)換為整數(shù)。數(shù)據(jù)量化后,矩陣中的數(shù)據(jù)都是近似值,和原始圖像數(shù)據(jù)之間有了不同,這一不同是造成圖像緊縮后失真的要緊緣故。這一進(jìn)程中,質(zhì)量因子的選取至為重要。值選得大,能夠大幅度提高緊縮比,但是圖像質(zhì)量就比較差,質(zhì)量因子越小圖像重建質(zhì)量越好,可是緊縮比越低。④編碼:編碼是基于統(tǒng)計(jì)特性的方式。四個(gè)步驟都完成后的JPEG文件,其大體數(shù)據(jù)結(jié)構(gòu)為兩大類型:“段”和經(jīng)過(guò)緊縮編碼的圖像數(shù)據(jù)。二、數(shù)據(jù)結(jié)構(gòu)1.段的一樣結(jié)構(gòu)如下表所示:表1:段的一樣結(jié)構(gòu)-----------------------------------------------------------------名稱 字節(jié)數(shù)數(shù)據(jù) 說(shuō)明-----------------------------------------------------------------段標(biāo)識(shí) 1 每一個(gè)新段的開(kāi)始標(biāo)識(shí)段類型 1 類型編碼(稱作“標(biāo)記碼”)段長(zhǎng)度 2 段內(nèi)容 ≤65533字節(jié)-----------------------------------------------------------------說(shuō)明:①JPG文件中所有關(guān)于寬度高度長(zhǎng)度距離這一類數(shù)據(jù),凡是>1字節(jié)的,均采用Motorola格式,即:高位在前,低位在后。②有些段沒(méi)有長(zhǎng)度描述也沒(méi)有內(nèi)容,只有段標(biāo)識(shí)和段類型。文件頭和文件尾均屬于這種段。③段與段之間不管有多少FF都是合法的,這些FF稱為“填充字節(jié)”,必需被忽略掉。2.段類型有30種,但只有10種是必需被所有程序識(shí)別的,其它的類型都能夠忽略。因此下面只列出這10種類型。表2:段類型---------------------------------------名稱 標(biāo)記碼 說(shuō)明---------------------------------------SOID8文件頭EOID9文件尾SOF0C0幀開(kāi)始(標(biāo)準(zhǔn)JPEG)SOF1C1同上DHTC4定義Huffman表(霍夫曼表)SOSDA掃描行開(kāi)始DQTDB定義量化表DRIDD定義重新開(kāi)始間隔APP0E0定義交換格式和圖像識(shí)別信息COMFE注釋-----------------------------------------------------------說(shuō)明:有的文章也將DNL段(標(biāo)記碼=DC,概念掃描行數(shù))列為必需段。3.以下按一樣JPEG文件的段排列順序詳細(xì)介紹各類段的結(jié)構(gòu):表3:SOI(文件頭)-----------------名稱 字節(jié)數(shù) 值-----------------段標(biāo)識(shí)1FF段類型1D8-----------------說(shuō)明:這兩個(gè)字節(jié)組成了JPEG文件頭。表4:APP0(圖像識(shí)別信息)--------------------------------------------------------------------------名稱 字節(jié)數(shù)值 說(shuō)明--------------------------------------------------------------------------段標(biāo)識(shí)1FF段類型1E0段長(zhǎng)度20010如果有RGB縮略圖就=16+3n(以下為段內(nèi)容)交換格式54A46494600“JFIF”的ASCII碼主版本號(hào)1次版本號(hào)1密度單位10=無(wú)單位;1=點(diǎn)數(shù)/英寸;2=點(diǎn)數(shù)/厘米X像素密度2水平方向的密度Y像素密度2垂直方向的密度縮略圖X像素1縮略圖水平像素?cái)?shù)目縮略圖Y像素 1 縮略圖垂直像素?cái)?shù)量XY縮略圖 XY像素--------------------------------------------------------------------------說(shuō)明:①JFIF是JPEGFileInterchangeFormat的縮寫,即JPEG文件互換格式,另外還有TIFF等格式,很少用②“若是有RGB縮略圖就=16+3n”是什么意思呢?比如說(shuō)“縮略圖X像素”Y48×48243n個(gè)字節(jié)。但大多數(shù)JPG文件都沒(méi)有那個(gè)“雞肋”縮略圖。表5:COM(注釋)--------------------------------------------------------------------------名稱 字節(jié)數(shù) 值 說(shuō)明--------------------------------------------------------------------------段標(biāo)識(shí) 1 FF段類型 1 FE段長(zhǎng)度 2 其值=注釋字符的字節(jié)數(shù)+2段內(nèi)容 注釋字符--------------------------------------------------------------------------說(shuō)明:有的JPEG文件沒(méi)有那個(gè)段。表6:DQT(概念量化表)--------------------------------------------------------------------------名稱 字節(jié)數(shù) 值 說(shuō)明--------------------------------------------------------------------------段標(biāo)識(shí)1FF段類型1DB段長(zhǎng)度243其值=3+n(當(dāng)只有一個(gè)QT時(shí))(以下為段內(nèi)容)QT信息10-3位:QT號(hào)4-7位:QT精度(0=8bit,1字節(jié);否則=16bit,2字節(jié))QTnn=64×QT精度的字節(jié)數(shù)--------------------------------------------------------------------------說(shuō)明:①JPEG文件一樣有2個(gè)DQT段,為Y值(亮度)概念1個(gè),為C值(色度)定義1個(gè)。②一個(gè)DQT段能夠包括多個(gè)QT,每一個(gè)都有自己的信息字節(jié)表7:SOF0(圖像大體信息)--------------------------------------------------------------------------名稱 字節(jié)數(shù) 值 說(shuō)明--------------------------------------------------------------------------段標(biāo)識(shí) 1 FF段類型 1 C0段長(zhǎng)度 2 其值=8+組件數(shù)量×3(以下為段內(nèi)容)樣本精度 1 8 每一個(gè)樣本位數(shù)(大多數(shù)軟件不支持12和16)圖片高度 2圖片寬度 2組件數(shù)量 1 3 1=灰度圖,3=Y(jié)CbCr/YIQ彩色圖,4=CMYK彩色圖(以下每一個(gè)組件占用3字節(jié))組件ID11=Y(jié),2=Cb,3=Cr,4=I,5=Q采樣系數(shù)10-3位:垂直采樣系數(shù)4-7位:水平采樣系數(shù)量化表號(hào)1---------------------------------------------------------------------------說(shuō)明:①JG多數(shù)采納Cb色彩模y表示亮Cr紅色分Cb表示藍(lán)色分,因此組件數(shù)量一樣3②樣本確實(shí)是單個(gè)像素的顏色分量,也可明白得為一個(gè)樣本確實(shí)是一個(gè)組件③采樣系數(shù)是實(shí)際采樣方式與最高采樣系數(shù)之比,而最高采樣系數(shù)一樣=0.5(分?jǐn)?shù)表示為1/2)。比如說(shuō),垂直采樣系數(shù)=2,那么2×0.5=1,表示實(shí)際1×0.5=0.5(分?jǐn)?shù)表示為1/2),表示每2個(gè)點(diǎn)采一個(gè)樣表8:DHT(概念Huffman表)--------------------------------------------------------------------------名稱字節(jié)數(shù)值說(shuō)明--------------------------------------------------------------------------段標(biāo)識(shí)1FF段類型1C4段長(zhǎng)度2 其值=19+n(當(dāng)只有一個(gè)HT表時(shí))(以下為段內(nèi)容)HT信息1 0-3位:HT號(hào)4位: HT類型,0=DC表,1=AC表5-7位:必需=0HT位表16 這16個(gè)數(shù)的和應(yīng)該≤256HT值表n n=表頭16個(gè)數(shù)的和--------------------------------------------------------------------------說(shuō)明:①JPEG文件里有2類Haffman表:一類用于DC(直流量),一類用于AC(交流量)。一樣有4個(gè)表:亮度的DC和AC,色度的DC和AC。最多可有6個(gè)。②一個(gè)DHT段能夠包括多個(gè)HT表,每一個(gè)都有自己的信息字節(jié)③HT表是一個(gè)按遞增順序代碼長(zhǎng)度排列的符號(hào)表。表9:DRI(概念從頭開(kāi)始距離)--------------------------------------------------------------------------名稱 字節(jié)數(shù) 值 說(shuō)明--------------------------------------------------------------------------段標(biāo)識(shí)1FF段類型1DD段長(zhǎng)度24(以下為段內(nèi)容)開(kāi)始距離2n復(fù)位標(biāo)記的距離距離---------------------------------------------------------------------------說(shuō)明:①開(kāi)始距離表示在緊縮數(shù)據(jù)流中,每隔n個(gè)MCU塊就有一個(gè)RST標(biāo)記,RST標(biāo)記將Huffman的解碼數(shù)據(jù)流復(fù)位,DC也從頭從0開(kāi)始,因此,RST標(biāo)記是一種復(fù)位標(biāo)記②RST標(biāo)記是一種特殊的段,它只具有段標(biāo)識(shí)和段類型(長(zhǎng)度=2字節(jié)),但它不是獨(dú)立的段,只能穿插在數(shù)據(jù)流中(文件頭和文件尾段也只有段標(biāo)識(shí)和段類型,卻都是獨(dú)立的段)。③RST標(biāo)記共有8?jìng)€(gè)(RST0-RST7),從RST0起開(kāi)始利用,然后是RST1....直至RST7,再?gòu)腞ST0重復(fù)。④RST標(biāo)記的標(biāo)識(shí)碼是FFD0-FFD7,對(duì)應(yīng)RST0-RST7⑤筆者查看了許多自己電腦上的JPG文件的數(shù)據(jù),未發(fā)覺(jué)DRI段和RST標(biāo)記,因此無(wú)法進(jìn)行詳盡的考察表10:SOS(掃描行開(kāi)始)--------------------------------------------------------------------------名稱 字節(jié)數(shù) 值 說(shuō)明--------------------------------------------------------------------------段標(biāo)識(shí) 1 FF段類型 1 DA段長(zhǎng)度 2 (以下為段內(nèi)容)掃描行內(nèi)組件數(shù)量1 3 必需≥1,≤4(不然錯(cuò)誤),通常=3(以下每一個(gè)組件占用2字節(jié))組件ID 1 1=Y,2=Cb,3=Cr,4=I,5=QHuffman表號(hào) 1 0-3位:AC表號(hào)(其值=0...3)4-7位:DC表號(hào)(其值=0...3)3 最后3個(gè)字節(jié)用途不明,忽略--------------------------------------------------------------------------說(shuō)明:緊接SOS段后的是緊縮的圖像數(shù)據(jù)(一個(gè)個(gè)掃描行),數(shù)據(jù)寄存順序是從左到右、從上到下。表11:EOI(文件尾)------------------名稱 字節(jié)數(shù) 值------------------段標(biāo)識(shí)1FF段類型1D9------------------說(shuō)明:這兩個(gè)字節(jié)組成了JPEG文件尾。三、實(shí)例分析用系統(tǒng)自帶的畫圖程序畫一個(gè)32×24的紅色方塊,另存為JPG文件的全數(shù)數(shù)據(jù)如下:0000:FFD8FFE000104A4649460001010100600010:00600000FFDB004300080606070605080020:0707070909080A0C140D0C0B0B0C19120030:130F141D1A1F1E1D1A1C1C20242E27200040:222C231C1C2837292C30313434341F270050:393D38323C2E333432FFDB00430109090060:090C0B0C180D0D1832211C21323232320070:323232323232323232323232323232320080:323232323232323232323232323232320090:3232323232323232323232323232FFC000A0:0011080018002003012200021101031100B0:01FFC4001F000001050101010101010000C0:0000000000000001020304050607080900D0:0A0BFFC400B51000020103030204030500E0:0504040000017D01020300041105122100F0:31410613516107227114328191A108230100:42B1C11552D1F02433627282090A16170110:18191A25262728292A3435363738393A0120:434445464748494A535455565758595A0130:636465666768696A737475767778797A0140:838485868788898A92939495969798990150:9AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B70160:B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D50170:D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF10180:F2F3F4F5F6F7F8F9FAFFC4001F0100030190:0101010101010101010000000000000101A0:02030405060708090A0BFFC400B5110001B0:0201020404030407050404000102770001C0:0102031104052131061241510761711301D0:22328108144291A1B1C109233352F01501E0:6272D10A162434E125F11718191A262701F0:28292A35363738393A434445464748490200:4A535455565758595A636465666768690210:6A737475767778797A828384858687880220:898A92939495969798999AA2A3A4A5A60230:A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C40240:C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE20250:E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F90260:FAFFDA000C03010002110311003F00E20270:E8A28AF993F710A28A2800A28A2800A20280:8A2803FFD9分析:0000-0001:FFD8(文件頭)0002-0013:APP0段,其中:0002-0003:FFE0(段標(biāo)記)0004-0005:0010(段長(zhǎng)度=16字節(jié))0006-000A:4A46494600(“JFIF”的ASCII碼)000B-000C:0101(主次版本號(hào)=1.01)000E-0011:00600060(水平和垂直的密度均為每英寸96像素)0012-0013:0000(沒(méi)有縮略圖)0014-0058:DQT段,其中:0014-0015:FFDB(段標(biāo)記)0016-0017:0043(段長(zhǎng)度=67字節(jié))0019-0058:QT0059-009D:DQT段,其中:0059-005A:FFDB(段標(biāo)記)005B-005C:0043(段長(zhǎng)度=67字節(jié))005E-009D:QT009E-00B0:SOF0段,其中:009E-009F:FFC0(段標(biāo)記)00A0-00A1:0011(段長(zhǎng)度=17字節(jié))00A3-00A6:00180020(圖像高=24,圖像寬=32)彩色圖)Y組件)QT號(hào)=0的量化表)Cb組件)QT號(hào)=1的量化表)Cr組件)QT號(hào)=1的量化表)00B1-00D1:DHT段,其中:00B1-00B2:FFC4(段標(biāo)記)00B3-00B4:001F(段長(zhǎng)度=31字節(jié))表)00B6-00C5:這16個(gè)數(shù)字之和=12,說(shuō)明下面的HT值表的長(zhǎng)度=12字節(jié))00C6-00D1:HT值表00D2-0188:DHT段,這是HT號(hào)=0的AC表,參照上面分析0189-01A9:DHT段,這是HT號(hào)=1的DC表,參照上面分析01AA-0260:DHT段,這是HT號(hào)=1的AC表,參照上面分析0261-026E:SOS段,其中:0261-0262:FFDA(段標(biāo)記)0263-0264:000C(段長(zhǎng)度=12字節(jié))0266-0267:0100(組件ID=1,Y組件,利用HT表號(hào)=0的AC表)0268-0269:0211(組件ID=2,Cb組件,利用HT表號(hào)=1的DC表)026A-026B:0311(組件ID=3,Cr組件,利用HT表號(hào)=1的DC表)026C-026E:003F00(幾乎每一個(gè)JPG文件中這3個(gè)字節(jié)的值都相同,但用途不明)026F-0282:圖像緊縮數(shù)據(jù)0283-0284:FFD9(文件尾)四、將位圖保留為JPG的函數(shù)代碼:OptionExplicitPrivateDeclareFunctionCLSIDFromStringLib"ole32"(ByValstrAsLong,idAsGUID)AsLongPrivateDeclareSubCopyMemoryLib"KERNEL32"Alias"RtlMoveMemory"(lpvDestAsAny,lpvSourceAsAny,ByValcbCopyAsLong)(ByValhbmAsLong,ByValhpalAsLong,BitmapAsLong)AsLongPrivateDeclareFunctionGdiplusStartupLib"gdiplus.dll"(ByReftokenAsLong,ByRefinputXAsGdiplusStartupInput,ByValOutputAsLong)AsLongPrivateDeclareFunctionGdipSaveImageToFileLib"gdiplus"(ByValImageAsLong,ByValFilenameAsLong,clsidEncoderAsGUID,encoderParamsAsAny)AsLongPrivateDeclareFunctionGdipDisposeImageLib"gdiplus"(ByValImageAsLong)AsLongPrivateDeclareFunctionGdiplusShutdownLib"gdiplus.dll"(ByValtokenAsLong)AsLongPrivateTypeGUIDAsAsAsData4(0To7)AsByteEndTypePrivateTypeGdiplusStartupInputGdiplusVersionAsLongDebugEventCallbackAsLongSuppressBackgroundThreadAsLongSuppressExternalCodecsAsLongEndTypePrivateTypeEncoderParameterGUIDAsGUIDtypeAsLongValueAsLongEndTypePrivateTypeEncoderParametersCountAsLongPara

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論