日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bmp实现图像缩放

發(fā)布時間:2024/3/24 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bmp实现图像缩放 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??? bmp刷圖是比較簡單的,它需要注意的是bmp在windows系統(tǒng)下會自動生成54個字

節(jié)的頭文件結(jié)構(gòu)體信息,如果要在知道bmp圖的圖像尺寸的話,就可以用lseek函數(shù)直接跳過這54個字節(jié)直接讀取自己想要的RGB圖像數(shù)據(jù),bmp圖像不同的是它的圖像讀取順序,是從左到右,從上到下,所以要刷到LCD屏幕中顯示,需要進行顛倒圖像數(shù)據(jù)。還有就是bmp圖像RGB圖像是3個字節(jié)即24位,但LCD一個像素點是4個字節(jié),需要每3個字節(jié)刷到4個字節(jié),跳過一個字節(jié)。

??? 因為在這次項目中,不是簡單的把圖刷進去,而是對不符合屏幕尺寸的圖像可以自動識別并進行放大縮小來適應(yīng)屏幕,所以事先是不知道圖片的尺寸的,要利用bmp的頭文件信息結(jié)構(gòu)體知道該圖像的長寬,所以就不能跳過這54個字節(jié),而是跳過14的字節(jié)。以上是bmp圖刷到LCD屏幕的所有注意事項,下面是實現(xiàn)代碼。

#include "../inc/include.h"typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef long LONG;typedef struct tagBITMAPINFOHEADER {DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; } BITMAPINFOHEADER;int show_bmp(char *name) //顯示bmp圖片 {BITMAPINFOHEADER info_head;unsigned char *bmp_buf;int fd_bmp = open(name, O_RDWR);if (fd_bmp < 0){perror("bmp open fail");return -1;}//跳過14個字節(jié)的頭文件信息,直接讀取BITMAPINFOHEADER結(jié)構(gòu)體lseek(fd_bmp, 14, SEEK_SET);read(fd_bmp, &info_head, sizeof(BITMAPINFOHEADER));if ((info_head.biHeight != 480) || (info_head.biWidth != 800)){printf("This bmp_image is (%d*%d),I have changed it to 800*480.\n", info_head.biWidth, info_head.biHeight);}unsigned char bmp_prebuf[info_head.biWidth * info_head.biHeight *3];read(fd_bmp, bmp_prebuf, sizeof(bmp_prebuf));close(fd_bmp);//用最鄰近插值來實現(xiàn)圖像的變換bmp_buf = insert_near(bmp_prebuf, info_head.biWidth, info_head.biHeight, 800, 480);bzero(lcd, LCD_SIZE);usleep(1000);/*由于bmp圖片只有三個字節(jié)數(shù)據(jù),而且刷圖順序是從下往上,要進行數(shù)據(jù)轉(zhuǎn)換*/for (int line = 0; line < 480; ++line){for (int pixel = 0; pixel < 800; ++pixel){int s = (line*800 + pixel) * 3;pre_lcd[479-line][pixel] = (bmp_buf[s+0]) | (bmp_buf[s+1]<<8) | (bmp_buf[s+2]<<16);}}return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的bmp实现图像缩放的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。