freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于linux操作系統(tǒng)的嵌入式設備圖像顯示技術與實現(xiàn)畢業(yè)論文-閱讀頁

2025-07-07 13:29本頁面
  

【正文】 字節(jié)數(shù) 說明 Length (長度) 4字節(jié) 指定數(shù)據(jù)塊中數(shù)據(jù)域的長度,其長度不超過(231-1)字節(jié) Chunk Type Code (數(shù)據(jù)塊類型碼) 4字節(jié) 數(shù)據(jù)塊類型碼由ASCII字母(AZ和az)組成 Chunk Data (數(shù)據(jù)塊數(shù)據(jù)) 可變長度 存儲按照Chunk Type Code指定的數(shù)據(jù) CRC (循環(huán)冗余檢測) 4字節(jié) 存儲用來檢測是否有錯誤的循環(huán)冗余碼 4 在PC下基于FRAMEBUFFER的LCD圖像顯示 FRAMEBUFFER原理與結(jié)構(gòu)Framebuffer幀緩沖是出現(xiàn)在 內(nèi)核當中的一種驅(qū)動程序接口。幀緩沖驅(qū)動的應用廣泛,在linux的桌面系統(tǒng)中,Xwindow服務器就是利用幀緩沖進行窗口的繪制。幀緩存可以在系統(tǒng)存儲器(內(nèi)存)的任意位置,視頻控制器通過訪問幀緩存來刷新屏幕。我們通過不停的向地址中寫入數(shù)據(jù),顯示控制器就會不斷地自動從內(nèi)存中取數(shù)據(jù)并顯示出來。FRAMEBUFFER中存儲的圖像都是一張一張存儲起來的,當需要顯示圖片時,顯卡會不停地刷新Framebuffer,如果不對每張顯示的圖片重新捕獲的話,則會被丟掉,這說明顯卡顯示圖像是實時的。例如用 cp /dev/fb0 tmp命令可將當前屏幕的內(nèi)容拷貝到一個文件中,而命令cp tmp /dev/fb0 則將圖形文件tmp顯示在屏幕上。幀緩沖設備通過對映射將屏幕緩沖區(qū)的物理地址映射到虛擬地址上,之后用戶就可以通過讀寫虛擬緩沖區(qū)在屏幕上繪制圖像了。映射操作都是由系統(tǒng)內(nèi)核來完成。ioctl的操作是由底層的驅(qū)動程序來完成的。 ② 用ioctrl操作取得當前顯示屏幕的參數(shù),如屏幕分辨率,每個像素點的比特數(shù)。 ③將屏幕緩沖區(qū)映射到用戶空間。FrameBuffer 只是一個提供顯示內(nèi)存和顯示芯片寄存器從物理內(nèi)存映射到進程地址空間中的設備。 FRAMEBUFFER的圖像顯示實現(xiàn)首先確保 Linux 內(nèi)核包含了 FrameBuffer 支持,并包含了 VESA FrameBuffer驅(qū)動程序。 然后確定LINUX的引導方式,本次調(diào)試系統(tǒng)引導方式為GRUB引導。例如: generated by anaconda Note that you do not have to rerun grub after making changes to this file NOTICE: You have a /boot partition. This means that all kernel and initrd paths are relative to /boot/, eg. root (hd0,0) kernel /vmlinuzversion ro root=/dev/VolGroup00/LogVol00 initrd /boot=/dev/sdadefault=0timeout=5splashimage=(hd0,0)/grub/hiddenmenutitle Fedora () root (hd0,0) kernel / ro root=/dev/VolGroup00/LogVol00 rhgb quiet vga=788(此處為最后添加) initrd /⑵確認修改完畢后,直接重啟系統(tǒng),開機如圖,出現(xiàn)企鵝標志則表明FRAMEBUFFER開啟成功。本程序?qū)PEGLIB函數(shù)庫進行重新編寫,實現(xiàn)代碼優(yōu)化,對圖像壓縮的更加全面。其中JPEG解碼過程包括色彩空間轉(zhuǎn)換、縮減取樣、離散余弦變換(DCT)、量化、熵編碼;執(zhí)行完解碼過程得到重構(gòu)圖像的YCrCb數(shù)據(jù),并將YCrCb顏色空間的數(shù)據(jù)轉(zhuǎn)換為24位RGB顏色空間的數(shù)據(jù),就得到了重構(gòu)的圖像數(shù)據(jù)。彩色數(shù)據(jù)送入LCD顯示緩沖區(qū),在LCD上顯示出解碼重構(gòu)圖像。JPEG格式熵解碼算法的實現(xiàn)熵解碼是解碼過程中最重要的一環(huán),主要是對讀入的圖像的數(shù)據(jù)進行的DC直系數(shù)和AC交流系數(shù)的Huffman解碼。采用自適應的Huffman碼表,首先要統(tǒng)計輸入圖像的特性,先生成碼樹,再做反推得到各級Huffman碼表。一般一個JPEG文件里會有4個Huffman碼表,用于直流DC系數(shù)的Huffman碼表(包括一個亮度表和一個色度表);用于交流AC的Huffman碼表(包括一個亮度表和一個色度表)。下圖42為Huffman解碼一個碼字的流程圖。先從碼流中讀入第一個比特位數(shù)據(jù),在Huffman樹中進行搜索,如果Huffman樹的值為零,說明該比特數(shù)據(jù)不是完整的Huffman編碼,然后再讀入下一個比特位數(shù)據(jù)加上前面的比特位數(shù)據(jù)組成新的碼字,然后再在Huffman樹中進行搜索,如果Huffman樹的值還為零,就重復前面的過程;在程序中用子程序DecodeElementO實現(xiàn)Huffman個碼字的解碼,解碼輸出是一個8位值。在位圖被壓縮稱為JPEG文件后,都會生成自己的量化表。反量化在程序中用函數(shù)IQtlZzBlock0來實現(xiàn)。代碼:void IQtIZzBlock(short *s){ short i,j。 short *pQt。 for(i=0。i++) { for(j=0。j++) { tag = Zig_Zag[i][j]。} }}JPEG反離散余弦變換IDCT的實現(xiàn)IDCT的運算量很大,其中要進行大量的浮點乘法和加法運算。完成一次二維88的IDCT運算總共要進行16次的8點一維IDCT運算。圖43實現(xiàn)二位IDCT運算在IDCT的初始化中,劃分IDCT進行過程中用到的中間緩存區(qū),并將并將其內(nèi)容清零。在8次一維的行轉(zhuǎn)換完成后,對存在中間數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)再進行8次的一維列IDCT變換。色彩模式轉(zhuǎn)換將IDCT結(jié)果得到的YCrCb色彩模式的數(shù)據(jù)轉(zhuǎn)化為RGB色彩模式的數(shù)據(jù),根據(jù)轉(zhuǎn)換公式(下圖)來實現(xiàn),程序中為函數(shù)StoreBuffer()。 R=Y+= Y = Y+(Cb 128)代碼:void tranRGBto256(){ int i,iRed,IGreen,iBlue。 for (i=800*480。i) {iBlue = *lpPtr++。 iRed = *lpPtr++。 iGreen = (iGreen*7+127)/255。 plmmBitmapl[i]=iBlue+(iGreen2)+(iRed5)。顯示程序中加載JEPG代碼如下:int fh_jpeg_load(char *filename,unsigned char *buffer, unsigned char ** alpha, int x,int y){ struct jpeg_depress_struct cinfo。 struct r_jpeg_error_mgr emgr。 int px,py,c。 JSAMPLE *lb。cinfo。 ciptrerr=jpeg_std_error(amp。 =jpeg_cb_error_exit。 fclose(fh)。 } jpeg_create_depress(ciptr)。 jpeg_read_header(ciptr,TRUE)。 jpeg_start_depress(ciptr)。 py=ciptroutput_height。 if(c==3) { lb=(*ciptrmemalloc_small)((j_mon_ptr) ciptr,JPOOL_PERMANENT,c*px)。 while (ciptroutput_scanline ciptroutput_height) { jpeg_read_scanlines(ciptr, amp。 memcpy(bp,lb,px*c)。 } } jpeg_finish_depress(ciptr)。 fclose(fh)。}int fh_jpeg_getsize(char *filename,int *x,int *y){ struct jpeg_depress_struct cinfo。 struct r_jpeg_error_mgr emgr。 FILE *fh。cinfo。 ciptrerr=jpeg_std_error(amp。 =jpeg_cb_error_exit。 fclose(fh)。 } jpeg_create_depress(ciptr)。 jpeg_read_header(ciptr,TRUE)。 jpeg_start_depress(ciptr)。 py=ciptroutput_height。 *x=px。 jpeg_destroy_depress(ciptr)。 return(FH_ERROR_OK)。代碼分別如下:RLE8壓縮算法代碼:static int decode_RLE8(BYTE *buf, img_buffer *img_buf){ int c, n。 for( 。 case 0: /* 0 = escape*/ switch( n = getc_image_buf(img_buf)) { case 0: /* 0 0 = end of current scan line*/ case 1: /* 0 1 = end of data*/ return 1。 getc_image_buf(img_buf)。 default: /* 0 3..255 xx nn unpressed data*/ for( c=0。 c++) *p++ = getc_image_buf(img_buf)。 1) getc_image_buf(img_buf)。 } default: c = getc_image_buf(img_buf)。 continue。 p = buf。 c1 = 0。) { switch (n = getc_image_buf(img_buf)) { case EOF: return 0。 return 1。 getc_image_buf(img_buf)。 default: /* 0 3..255 xx nn unpressed data */ c2 = (n + 3) amp。 for (c = 0。 c++) { if ((c amp。 if (c n) put4((c1 4) amp。 c1 = 4。 } default: c = getc_image_buf(img_buf)。 0x0f。 0x0f。 c n。 1) ? c2 : c1)。 } }}BMP格式圖像加載流程圖:圖44 BMP格式圖像加載流程圖BMP格式圖像部分代碼如下:加載代碼:int read_bmp(IMAGEHEADER *image, void *buffer, size_t size){ int h, pression =0 。 file_header fheader。 core_head chead。 BYTE head_buf[INFO_HEAD_SIZE]。 init_image_buf(amp。 if(read_image_buf(amp。head_buf, FILE_HEADER_SIZE) != FILE_HEADER_SIZE) { imagetype = 0。 } [0] = head_buf[0]。 if(*((WORD *)(amp。BM39。 DBG_INFO( This is not bitmap image\n)。 } = dwswap(dwread(amp。 if(read_image_buf(amp。headsize, sizeof(int)) != sizeof(int)) { imagetype =0。 } headsize = dwswap(headsize)。img_buf,amp。 } = wswap(*((WORD *)amp。 = wswap(*((WORD *)amp。 = wswap(*((WORD *)amp。 = wswap(*((WORD *)amp。 imagewidth = (int)。 imagebpp = 。 } else { if(read_image_buf(amp。head_buf, INFO_HEAD_SIZE sizeof(DWORD)) != INFO_HEAD_SIZE sizeof(DWORD)) { return 1。head_buf[0]))。head_buf[4]))。head_buf[8]))。head_buf[10]))。head_buf[12]))。head_buf[16]))。head_buf[20]))。head_buf[24]))。head_buf[28]))。head_buf[32]))。 imagedepth = (int)。 pression = 。a
點擊復制文檔內(nèi)容
醫(yī)療健康相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1