![配套例程ijgjpeg作者ysm日期2009年10月27發(fā)表評(píng)論0查看_第1頁(yè)](http://file4.renrendoc.com/view/cb5ae174755001e8edcf051d5d88024a/cb5ae174755001e8edcf051d5d88024a1.gif)
![配套例程ijgjpeg作者ysm日期2009年10月27發(fā)表評(píng)論0查看_第2頁(yè)](http://file4.renrendoc.com/view/cb5ae174755001e8edcf051d5d88024a/cb5ae174755001e8edcf051d5d88024a2.gif)
![配套例程ijgjpeg作者ysm日期2009年10月27發(fā)表評(píng)論0查看_第3頁(yè)](http://file4.renrendoc.com/view/cb5ae174755001e8edcf051d5d88024a/cb5ae174755001e8edcf051d5d88024a3.gif)
![配套例程ijgjpeg作者ysm日期2009年10月27發(fā)表評(píng)論0查看_第4頁(yè)](http://file4.renrendoc.com/view/cb5ae174755001e8edcf051d5d88024a/cb5ae174755001e8edcf051d5d88024a4.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
使用IJG讀寫JPEG格式文件作者:ysm日期:2009年10月27 cIJGIndependentJPEGGroup,是一個(gè)用于JPEG文件格式的開(kāi)源庫(kù)。用于遙感和地理信息系統(tǒng)數(shù)據(jù)處理的GDAL就是用這個(gè)庫(kù)進(jìn)行JPEG格式解析的。IJG的主頁(yè)是 本文中將依據(jù)文檔中l(wèi)ibjpeg.doc介紹一些基本JPEG文件解壓縮和壓縮處理方式,細(xì)節(jié)及其他高級(jí)操作可以參libjpeg.doc中的具體介紹。編編譯需要的源代碼包 是 , 上,比如 其解壓到C\jpeg6b,在文件夾中有幾個(gè)*.doc的文件,是IJG的安裝使用文檔,比如nstall.doc就是安裝的說(shuō)明書。雖然這幾個(gè)文件是以doc為擴(kuò)展名,其實(shí)只是幾個(gè)文本文件,用記事本之類的程序也可以打開(kāi)。Libjpeg.doc則是在你的程序中使用IJG庫(kù)進(jìn)行開(kāi)發(fā)的使用說(shuō)明。另外還有個(gè)exampl.c文件是一個(gè)示例代碼文件,里面有使用IJG進(jìn)行JEG讀寫的樣本代以及段的解基來(lái),際時(shí)接照example.c的代碼框架進(jìn)行修改就基本能滿足我們應(yīng)用程序的需要。IJG支持多平臺(tái)下的應(yīng)用,不同平臺(tái)下的編譯安裝細(xì)節(jié)都可以在install.doc中找到。在此在windows下使用的時(shí)候需要對(duì)源代碼做幾處修改。在頭jmorecfg.h中找到如下代碼:#ifdefNEED_FAR_POINTERS#defineFARfar#defineFAR在這段代碼下面添加一#define /*ysm還是在這個(gè)#ifndefXMD_H /*X11/xmd.hcorrectlydefinesINT32*/typedeflongINT32;修改#ifndefXMD_H /*ysmfixed*/#ifndef_BASETSD_H_typedeflongINT32;開(kāi)始編譯前需要首先將jconfig.vc更名jconfig.h,然后在命令行下進(jìn)入到VC2005的安下,比如在我的機(jī)器上是C:\PogamFiles\ Vsaltudo8\VC,在bin 下有一個(gè)為vcvars32.bat是 VC2005相關(guān)的一些環(huán)境變量,然后不要關(guān)閉當(dāng)命令窗口,進(jìn)入到IJG的安裝 ,在此即C:jpeg6b令nmake/fmakeile.vc,是編譯IJG,屏迅閃一編譯息,如果沒(méi)有錯(cuò)誤出現(xiàn)IJG也就編譯完成。編譯過(guò)程中會(huì)可能會(huì)出現(xiàn)一些警告信息,大概就是說(shuō)代碼中使用的標(biāo)準(zhǔn)C函數(shù)在VC2005下被認(rèn)為是不安全而過(guò)時(shí)的,不過(guò)沒(méi)什么大關(guān)系,忽略就行,這個(gè)警告在用VC6編譯的時(shí)候就不會(huì)出現(xiàn)。編譯完成后,IJG的安裝 下會(huì)出現(xiàn)若干文件,我們所需要的是一個(gè)叫做libjpeg.lib的靜態(tài)庫(kù) 使用。除此一般還要用到4個(gè)頭文件,jconfig.h、jerror.h、 下還會(huì)有一些可執(zhí)行文件,是IJG提供的工具程序,在usage.doc中有使用方法的介紹。但對(duì)程序員來(lái)說(shuō),最重要的還是4個(gè)頭文件加一個(gè)庫(kù)文件,以后用IJG開(kāi)開(kāi)發(fā)環(huán)境配置在VC2005下使用IJG之前,首先要讓VC能夠找到那四個(gè)頭文件,比如說(shuō)將它們拷到使用IJG的項(xiàng)目當(dāng) 下,系統(tǒng)的頭文 下,或者在VC環(huán)境下做一下配置,也就是在菜單工具-選 下,將頭文件和lib文件所在的 [在程序中需要引入的頭文件就是jpeglib.h,由于IJG是用C語(yǔ)言寫的,所以在C++引入這個(gè)頭文件就需要使用extern“C”,如下所示:extern{#include}。。為為JPEG指定解壓縮數(shù)據(jù)為解壓縮設(shè)定參數(shù),包括圖像大小,顏色空開(kāi)始解壓取出數(shù)解壓縮完釋放資JPEG對(duì)象分配空間并初始化解壓縮過(guò)程中使用的JPEG對(duì)象是一個(gè) press_struct的結(jié)構(gòu)體。同時(shí)還需要定義一個(gè)用于錯(cuò)誤處理的結(jié)構(gòu)體對(duì)象,IJG中標(biāo)準(zhǔn)的錯(cuò)誤結(jié)構(gòu)體是jpeg_error_mgr。 press_structcinfo;structjpeg_error_mgrjerr;cinfo.err=cinfo.err=ponents (void) ;cinfo,開(kāi)始解壓縮根據(jù)設(shè)定的解壓縮參數(shù)進(jìn)行圖像解壓縮操作 在完成解壓縮操作后,IJG就會(huì)將解壓后的圖像信息填充至cinfo結(jié)構(gòu)中。比如,輸出圖像ponents(比如灰度為1,全彩色為3)等。一般情況下,這些參數(shù)是 press后才被填充到cinfo中的,如果希望在調(diào)press之前就獲得這些參數(shù),可以通過(guò)調(diào)用jpeg_calc_output_dimensions()方法來(lái)實(shí)現(xiàn)取出數(shù)據(jù)解開(kāi)的數(shù)據(jù)是按照行取出的,數(shù)據(jù)像素按照scanline來(lái),scanline是從左到右,從上到下的順序,每個(gè)像素對(duì)應(yīng)的各顏色或灰度通道數(shù)據(jù)是依次,比如一個(gè)24-bitRGB真彩色的圖像中,一個(gè)scanline中的數(shù)據(jù)模式是R,G,B,R,G,B,R,G,B,…,每條scanline是一個(gè)JSAMPLE類型的數(shù)組,一般來(lái)說(shuō)就unsignedchar,定義jmorecfg.h中。JSAMPLE,IJG還定JSAMPROWJSAMPARRAY,分別表JSAMPLE和一JSAMPLE數(shù)組在此,我們定義一個(gè)JSAMPARRAY類型的緩沖區(qū)變量來(lái)存放圖像數(shù)據(jù)。JSAMPARRAY然后是計(jì)算每行需要的空間大小,比如RGB圖像就是寬度×3,灰度圖就是寬度row_stride=cinfo.output_width 為緩沖區(qū)分配空間,這里使用了IJG的內(nèi)存管理器來(lái)完成分JPOOL_IMAGE表示分配的內(nèi)存空間將在調(diào)用 jpeg_abort后被釋放,而如果此參數(shù)改為JPOOL_PERMANENT則表示內(nèi)存將一直到JPEG對(duì)象 如上所說(shuō),是每行數(shù)據(jù)的實(shí)際大小。最后一個(gè)參數(shù)是要分配多少行數(shù)據(jù)。while(cinfo.output_scanline<{(void)jpeg_read_scanlines(;cinfo,buffer,//do} 完整例程press_structstructjpeg_error_mgrjerr;FILE*infile;JSAMPARRAYbuffer;introw_stride;cinfo.err= if((infile=fopen("sample.jpg","rb"))=={}//設(shè)定解壓縮參數(shù),此處圖像長(zhǎng)寬縮小為原圖的1/2 //GDI+在客戶區(qū)繪制圖像CClientDCdc(this);Bitmapbm(cinfo.output_width,cinfo.output_height);Graphicsgraphics(dc.GetSafeHdc());Graphicsgdc(row_stride=cinfo.output_width buffer=(*cinfo.mem->alloc_sarray)(( mon_ptr);cinfo,JPOOL_IMAGE,row_stride,1);while(cinfo.output_scanline<{(void)jpeg_read_scanlines(;cinfo,buffer,//output_scanline11intline=cinfo.output_scanline-1;for(inti=0;i為為JPEG指定圖像輸出目開(kāi)始?jí)簩懭霐?shù)壓縮完釋放資JPEG對(duì)象分配空間并初始化壓縮過(guò)程中使用的JPEG對(duì)象是一個(gè) press_struct的結(jié)構(gòu)體。同時(shí)還需要定義一個(gè)用于錯(cuò)誤處理的結(jié)構(gòu)體對(duì)象,IJG中標(biāo)準(zhǔn)的錯(cuò)誤結(jié)構(gòu)體是jpeg_error_mgr。 press_structcinfo;structjpeg_error_mgrjerr;colorspacecolorspace:cinfo.image_width=cinfo.image_height=ponents=3;cinfo.in_color_space=JCS_RGB; 在此之后還可以對(duì)其他的一些參數(shù)進(jìn)行設(shè)定。具體有哪些參數(shù)可以查詢?cè)诖酥筮€可以對(duì)其他的一些參數(shù)進(jìn)行設(shè)定。具體有哪些參數(shù)可以查詢 文檔quality是個(gè)0~100之間的整數(shù),表示壓開(kāi)始?jí)嚎s根據(jù)設(shè)定的壓縮參數(shù)進(jìn)行圖像壓縮操作。o,開(kāi)始?jí)嚎s過(guò)程后就不可以修改寫入數(shù)據(jù)對(duì)象row_stride=image_width*同上文介紹的解壓縮操作中介紹的,要寫入的數(shù)據(jù)是按照行寫入的,數(shù)據(jù)像素按照scanline來(lái),與數(shù)據(jù)的不同是使用jpeg_write_scanlines。類似于解壓縮操作中的cinfo.output_scanline<cinfo.output_height機(jī)制,壓cinfo.next_scanline<cinfo.image_height來(lái)判斷是否完成寫在此,假設(shè)image_buffer是個(gè)JSAMPARRAY類型變量,其中保存的是要輸出的圖像數(shù)據(jù),比如可以是用上文中的解壓縮操作從某JPEG文件中獲得的數(shù)據(jù)。JSAMPROWwhile(cinfo.next_scanline<{row_pointer=}壓縮完畢釋放資源退出程序如果不再需要JPEG對(duì)象,則 或或而如果還希望繼續(xù)使用JPEG對(duì)象,則可或完整例程press_structstructjpeg_error_mgrjerr;FILE*outfile;JSAMPROWrow_pointer;introw_stride;cinfo.err= if((outfile=fopen("dest.jpg","wb"))=={} cinfo.image_width=image_width;cinfo.image_height=image_height;ponents=cinfo.in_color_space=;cinfo,90,;cinfo,row_stride=image_width*while(cinfo.next_scanline<{row_pointer=struct{structjpeg_error_mgrpub;jmp_bufsetjmp_buffer;typedefstructmy_error_mgr*METHODDEF(void)my_error_exit mon_ptr{my_error_ptrmyerr=(my_error_ptr)cinfo->err;(*cinfo->err->output_message)(cinfo);longjmp(myerr->setjmp_buffer,1);}press_structstructjpeg_erro
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 當(dāng)幸福來(lái)敲門觀后感合集15篇
- 巾幗標(biāo)兵先進(jìn)事跡材料集錦15篇
- 感恩父母講話稿(集合15篇)
- 扭轉(zhuǎn)治療分享會(huì)
- 培訓(xùn)學(xué)校招生宣傳
- 初級(jí)金融專業(yè)-《金融專業(yè)知識(shí)與實(shí)務(wù)》名師預(yù)測(cè)卷1117
- 初級(jí)會(huì)計(jì)經(jīng)濟(jì)法基礎(chǔ)-初級(jí)會(huì)計(jì)《經(jīng)濟(jì)法基礎(chǔ)》預(yù)測(cè)試卷325
- 智研咨詢發(fā)布-2024年中國(guó)曲軸行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局、行業(yè)政策及需求規(guī)模預(yù)測(cè)報(bào)告
- 產(chǎn)業(yè)研究報(bào)告-2024年中國(guó)磁懸浮軸承行業(yè)發(fā)展現(xiàn)狀、市場(chǎng)規(guī)模、投資前景分析(智研咨詢)
- 二零二五年度家居定制銷售購(gòu)銷合同(含設(shè)計(jì)服務(wù))2篇
- 2025江蘇太倉(cāng)水務(wù)集團(tuán)招聘18人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024-2025學(xué)年人教新版高二(上)英語(yǔ)寒假作業(yè)(五)
- 《旅游資料翻譯》課件
- 2024年安徽省中考數(shù)學(xué)試卷含答案
- 微項(xiàng)目 探討如何利用工業(yè)廢氣中的二氧化碳合成甲醇-2025年高考化學(xué)選擇性必修第一冊(cè)(魯科版)
- 廣東省廣州市黃埔區(qū)2024-2025學(xué)年八年級(jí)物理上學(xué)期教學(xué)質(zhì)量監(jiān)測(cè)試題
- 財(cái)務(wù)管理學(xué)(第10版)課件 第1章 總論
- 《鼻咽癌的診治》課件
- 有關(guān)信用證的案例分析
- 水中大腸桿菌的檢測(cè)實(shí)驗(yàn)報(bào)告
- 智慧體育場(chǎng)館建設(shè)方案
評(píng)論
0/150
提交評(píng)論