JPG(JPEG)是最常見的圖片格式,其具有出色的壓縮能力和很小的圖象失真。因性能優(yōu)異,JPG現(xiàn)已成為計(jì)算機(jī)的標(biāo)準(zhǔn)圖象格式,且隨著枝術(shù)的進(jìn)步,JPG的算法也有了進(jìn)一步的發(fā)展。所以加入到匯編中已經(jīng)不可避免的需要圖像解碼庫!
軟件步驟
Jpeg解碼時(shí)利用到libjpeg解碼庫;解碼大概可以分為九個(gè)步驟:
1.設(shè)置出錯(cuò)處理函數(shù)。
2.初始化解碼對(duì)象圖片。
3.初始化源數(shù)據(jù)。
4.讀取jpeg文件的頭信息。
設(shè)置解碼參數(shù)。6.開始解碼。
7.讀取解碼數(shù)據(jù)。
8.結(jié)束解碼。
9.釋放解碼對(duì)象。
解碼代碼:
example.c他給出了解碼代碼和壓縮代碼,函數(shù)put_scanline_someplace(buffer[0],row_stride)需要自己編寫。功能是存取解碼一行得到的bmp數(shù)據(jù)。對(duì)于24位真彩圖像使用char aa[960][1600][4];inti=0;
While(cinfo.output_scanline<cinfo.output_height){
(void)jpegg_read_scanline(&cinfo,buffer,1);
Put_scanline_someplace(buffer[0],row_stride);
For(j=0;j<cinfo;output_width/3;j++)
{
Memcpy(aa[i][j],*buffer+j*3,3);
}
i++;
}
這里要注意rgb三色早字符數(shù)組中的存放順序,獨(dú)處顏色會(huì)不對(duì),只需改變a[i][j][0]和a[i][j][2]的內(nèi)容就行。
注意事項(xiàng)
這個(gè)JPG解碼庫是針對(duì)MCU寫的,為了節(jié)約資源,它實(shí)際是標(biāo)準(zhǔn)JPG解碼的一個(gè)子集。只實(shí)現(xiàn)了部分JPG解碼的功能。本庫并不能支持所有格式的JPG圖片,但絕大部分圖片是支持的(經(jīng)Windows的繪圖存貯的JPG圖片都支持)。同時(shí)由于MCU資源有限,實(shí)際解碼的JPG文件需要用專用JPG垃圾信息清理軟件清理一下(這種軟件并不破壞原文件的文件結(jié)構(gòu)),可以放心使用。使用它主要是因?yàn)橄驪hotoshop等軟件處理后的JPG圖片里會(huì)包含與原圖片不相關(guān)的各種垃圾信息,當(dāng)原圖片不是太大時(shí),這些信息可能比圖象本身還要大得多。
此外,銘正同創(chuàng)擁有自主的JPG解碼源代碼,可快速針對(duì)不同的MCU/CPU平臺(tái)制作出專有的應(yīng)用庫,這些技術(shù)將會(huì)隨著產(chǎn)品提供給特定的用戶;而為了方便用戶作技術(shù)評(píng)估,我們提供了基于凌陽unSP系列單片機(jī)(SPCE061A)的JPG解碼應(yīng)用庫,以及Demo程序。
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版