版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
jpeg圖片解碼顯示丁建明華嵌教育教學目標了解libjpeg
libjpeg庫是專門用于jpeg圖片格式解壓和壓縮的庫解壓jpeg圖片,并顯示到LCD屏上jpeg介紹JPEG是JointPhotographicExpertsGroup(聯(lián)合圖像專家小組)的縮寫。JPEG的壓縮方式通常是破壞性資料壓縮(lossycompression),意即在壓縮過程中圖像的品質會遭受到可見的破壞。稱為有損壓縮。JPEG格式壓縮的主要是高頻信息,對色彩的信息保留較好,適合應用于互聯(lián)網(wǎng),可減少圖像的傳輸時間,支持24bit真彩色,也普遍應用于需要連續(xù)色調的圖像。libjpeg簡介libjpeg是一個完全用C語言編寫的庫,包含了被廣泛使用的JPEG解碼、JPEG編碼和其他的JPEG功能的實現(xiàn)。這個庫由獨立JPEG工作組維護。最新版本號是6b,于1998年發(fā)布。在libjpeg中,圖像數(shù)據(jù)是以掃描線的形式存放的。每一條掃描線由一行像素點構成,像素點沿著掃描線從左到右依次排列。對于彩色圖像,每個分量由三個字節(jié)組成,因此這三個字節(jié)以R、G、B的順序構成掃描線上的一個像素點。一個典型的掃描線形式如下:R,G,B,R,G,B,R,G,B,…通過libjpeg解壓出來的圖像數(shù)據(jù)也是以掃描線的形式存放的。jpeg解碼顯示流程初始化顯示設備打開圖像文件設置出錯處理函數(shù)分配并初始化一個JPEG解壓對象指定要解壓縮的圖像文件獲取圖像信息開始解壓為解壓后的掃描線上的所有像素點分配空間循環(huán)讀取一行并顯示到液晶屏上結束解碼釋放解碼對象關閉文件解除顯存映射,關閉顯示設備文件jpeg解碼顯示流程圖需要用到的頭文件#include<stdio.h>#include<stdlib.h>#include<string.h>#include<fcntl.h>#include<sys/types.h>#include<linux/fb.h> //framebuffer頭文件#include<sys/mman.h> //內(nèi)存映射頭文件#include<jpeglib.h> //libjpeg頭文件#include<jerror.h> //libjpeg錯誤處理頭文件jpeg解碼顯示具體流程1、初始化顯示設備
具體查看framebuffer操作流程2、打開一個jpeg圖像文件3、設置默認的出錯信息注:在libjpeg庫中,實現(xiàn)了默認錯誤處理函數(shù),當錯誤發(fā)生時,比如如果內(nèi)存不足等,則默認錯誤處理函數(shù)將會調用exit函數(shù)結束整個進程FILE*infile=fopen(“picture.jpeg”,“r”);structjpeg_error_mgrjerr;cinfo.err=jpeg_std_error(&jerr);jpeg解碼顯示具體流程4、分配并初始化一個JPEG解壓對象
5、指定要解壓縮的圖像文件
6、獲取圖像信息,調用結束后cinfo結構體中已填充圖片信息
7、開始解碼structjpeg_decompress_structcinfo;jpeg_create_decompress(&cinfo);jpeg_stdio_src(&cinfo,infile);jpeg_read_header(&cinfo,TRUE);jpeg_start_decompress(&cinfo);jpeg解碼顯示具體流程structjpeg_decompress_structcinfo中所需要用到的成員參數(shù):
cinfo.output_height :掃描線的總數(shù) cinfo.output_width :圖像輸出的寬度
cinfo.output_components:每個像素的分量數(shù)也稱字節(jié)數(shù)jpeg解碼顯示具體流程8、為解壓后的掃描線上的所有像素點分配空間注:開始解壓后往往需要為解壓后的每一條掃描線上的所有像素點分配存儲空間,這個空間的大小可以通過output_wight*output_componets確定。
char*buffer=(unsignedchar*)malloc(cinfo.output_width* cinfo.output_components);jpeg解碼顯示具體流程9、循環(huán)讀取一行并顯示到液晶屏上
對掃描線的讀取是按照從上到下的順序進行的,也就是說圖像最上方的掃描線最先被jpeg_read_scanlines()讀入存儲空間中,緊接著是第二個掃描線,最后是圖像底邊的掃描線被讀入存儲空間中。inty=0;while(cinfo.output_scanline<cinfo.output_height){ //讀取一行并顯示 jpeg_read_scanlines(&cinfo,&buffer,1); //讀取一行像素點 unsignedshortcolor; for(x=0;x<cinfo.output_width;x++){ color=RGB888toRGB565(buffer[x*3], buffer[x*3+1],buffer[x*3+2]); fb_pixel(x,y,color); //顯示一個像素點
} y++;}jpeg解碼顯示流程RGB888轉RGB565 如果所用的Framebuffer設備的顏色深度為16位,顏色格式為5-6-5格式——即R(紅色)在16bit中占據(jù)高5位,G(綠色)在16bit中占據(jù)中間6位,B(藍色)在16bit中占據(jù)低5位;而libjpeg解壓出來的圖像數(shù)據(jù)為24位RGB格式,因此必須進行轉換。對于24位的RGB,每個字節(jié)表示一個顏色分量,因此轉換的方式為:對于R字節(jié),右移3位,對于G字節(jié),右移2位,對于B字節(jié),右移3位,然后將右移得到的值拼接起來,就得到了16位的顏色值unsignedshortRGB888toRGB565(unsignedcharred, unsignedchargreen,unsignedcharblue){unsignedshortB=(blue>>3)&0x001F;unsignedshortG=((green>>2)<<5)&0x07E0;unsignedshortR=((red>>3)<<11)&0xF800;return(unsignedshort)(R|G|B);}jpeg解碼顯示流程10、結束解碼
11、釋放解碼對象12、釋放為解壓后的掃描線上的所有像素點分配空間
13、關閉文件jpeg_finish_decompress(&cinfo);jpeg_destroy_decompress(&cinfo);free(buffer);fclose(infile);jpeg解碼顯示流程14、解除顯存映射,關閉顯示設備文件
具體看framebuffer
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化學老師2022新學期工作計劃
- 學生會主席年度工作規(guī)劃3篇
- 設計師年度工作總結匯編15篇
- 班主任手冊周工作計劃內(nèi)容
- “三生教育”心得體會6篇
- 因個人原因的辭職報告(15篇)
- 中國法制史 第四章 刑事法律制度
- 2025年高速精密平板切紙機項目發(fā)展計劃
- 兄弟贍養(yǎng)父母協(xié)議書(2篇)
- 公共關系專家中介合同(2篇)
- 創(chuàng)意寫作與文學欣賞
- 糖果行業(yè)大數(shù)據(jù)分析-洞察分析
- 名畫中的瘟疫史知到智慧樹章節(jié)測試課后答案2024年秋上海健康醫(yī)學院
- 高空伐樹作業(yè)施工方案
- 新媒體用戶行為研究-洞察分析
- 新建二級加油站項目投資立項可行性分析報告
- 湖北省荊門市(2024年-2025年小學六年級語文)統(tǒng)編版質量測試(上學期)試卷及答案
- 2025版國家開放大學法學本科《知識產(chǎn)權法》期末紙質考試總題庫
- 剪輯師的職業(yè)規(guī)劃
- 2022-2023學年北京市海淀區(qū)七年級(上)期末語文試卷
- 膝關節(jié)炎階梯治療
評論
0/150
提交評論