亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

詳解Linux下讀取位圖的注意事項

2020-07-27 18:53:20
字體:
來源:轉載
供稿:網友

詳解Linux下讀取位圖的注意事項

 在Linux下讀取位圖遇到的問題,很好地體現了linux與Windows操作系統的不同。按理說位圖格式與操作系統無關,讀取也應該無關,實際上在位圖讀到內存中時已經不同。下面主要介紹自己在Linux下操作位圖遇到的問題。

(一)、位圖結構

    位圖一開始是兩個結構體,包括位圖的詳細信息,是讀取后面數據的關鍵。所以讀取位圖首先要正確讀取這兩個結構體:BITMAPFILEHEADER和BITMAPINFOHEADER。其具體定義為:

typedef struct tagBITMAPFILEHEADER { // bmfh   WORD  bfType;   DWORD  bfSize;   WORD  bfReserved1;   WORD  bfReserved2;   DWORD  bfOffBits; }__attribute__ ((packed))BITMAPFILEHEADER; typedef struct tagBITMAPINFOHEADER { // bmih   DWORD biSize;   LONG  biWidth;   LONG  biHeight;   WORD  biPlanes;   WORD  biBitCount;   DWORD biCompression;   DWORD biSizeImage;   LONG  biXPelsPerMeter;   LONG  biYPelsPerMeter;   DWORD biClrUsed;   DWORD biClrImportant; }__attribute__ ((packed))BITMAPINFOHEADER; 

    上面兩個結構是Windows下可以正常使用的。但是Linux下沒有WORD、DWORD之類的變量類型,所以我們需要將這些變量映射到Linux下的常用變量類型:

typedef unsigned short WORD; typedef unsigned int DWORD; typedef int LONG;//use int not long here!!! typedef unsigned char BYTE; 

    上述映射要特別注意每個類型的字節數。不同的操作系統變量的長度不同,我們在定義時首先需要用sizeof獲得本機器的變量類型長度,然后再根據位圖每個屬性長度去選擇合適的變量類型。在此第三個變量LONG在windows下是四個字節,但是在Linux下是八個字節,所以我們需要用int來代替LONG。

(二)、對齊

     在位圖結構的定義中,我們在結構體名稱前面添加了語句__attribute__ ((packed))。__attribute__ ((packed)) 的作用就是告訴編譯器取消結構在編譯過程中的優化對齊,按照實際占用字節數進行對齊,是GCC特有的語法。在windows下,讀取操作不會優化,按照結構體實際的大小去讀取,但是在Linux下,為了加快訪存速度,會啟用訪存的對齊操作。這時讀到內存中的結構體大小就大于最初的定義,此時如果按照之前的大小去訪問位圖屬性,將讀到錯誤的數值。為了使訪問方便,我們需要禁止對齊優化。

(三)、位圖數據

    對于24位真彩色位圖,位圖不包括調色板,位圖數據就是RGB顏色的值。所以很多人認為數據的大小就是3*height*width,讀取數據的時候直接利用這個大小,但這是錯誤的。24位真彩色位圖每一行還需要滿足一個條件:數據長度能被4整除,否則需要用0補齊到能被4整除。所以讀取的過程需要一行一行完成,而且在每一行的末尾,我們都需要跳過一定數量的0,這個計算公式如下:                                   

    skip=(4-(3*width)%4)%4;

    C語言下,讀取過程如下:

for(int i=0;i<height;i++) {   fread(p,sizeof(unsigned char)*width*3,1,fp);   p+=sizeof(unsigned char)*width)*3;   fseek(fp,skip*sizeof(unsigned char),SEEK_CUR);  } 

(四)、RGB順序

    如前所述,24位真彩色位圖不包括調色板,位圖數據就是RGB顏色的值,每個顏色占據一個字節。此時很多人認為顏色的順序是R、G、B,但這也是錯誤的,實際的順序應該是B、G、R。這一點也需要特別注意。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美交受高潮1| 亚洲精品一区av在线播放| 日韩在线观看视频免费| 亚洲欧美日韩一区在线| 国产成人精品一区| 欧美极品美女视频网站在线观看免费| 国产婷婷97碰碰久久人人蜜臀| 91精品国产免费久久久久久| 亚洲九九九在线观看| 欧美激情国产日韩精品一区18| 亚洲精品电影在线观看| 2019中文字幕在线| 国语自产精品视频在线看抢先版图片| 亚洲免费电影在线观看| 精品国产电影一区| 欧美最顶级丰满的aⅴ艳星| 精品一区二区电影| 欧美成人免费全部观看天天性色| 欧美在线观看www| 国产精品高潮视频| 欧美国产日韩免费| 国产一区二中文字幕在线看| 欧美日韩激情网| 国产日韩av高清| 91日本在线观看| 欧美理论电影在线观看| 日韩免费在线播放| 岛国视频午夜一区免费在线观看| 色老头一区二区三区在线观看| 亚洲精品美女久久久| 精品在线欧美视频| 国产精品久久视频| 国产一区玩具在线观看| 欧美综合在线观看| 中文欧美日本在线资源| 国产亚洲欧美aaaa| 在线视频欧美日韩| 国产日韩欧美在线| 国产日韩欧美自拍| 97视频在线免费观看| 欧美性生交xxxxx久久久| 国产精品va在线播放| 国内精品久久久久久影视8| 伊人久久久久久久久久久久久| 亚洲午夜精品久久久久久性色| 国产成人97精品免费看片| 精品国内亚洲在观看18黄| 欧美一级淫片丝袜脚交| 日韩欧美中文在线| 国产人妖伪娘一区91| 91精品国产综合久久香蕉922| 亚洲国产精品一区二区三区| 91精品国产自产在线| 亚洲xxxx视频| 久久精品一偷一偷国产| 茄子视频成人在线| 午夜精品美女自拍福到在线| 91精品国产99久久久久久| 欧美另类交人妖| 亚洲天堂第一页| 欧美xxxx14xxxxx性爽| 日韩中文字幕在线视频播放| 久久九九有精品国产23| 国产精品aaaa| 亚洲第一区第二区| 精品国内亚洲在观看18黄| 97免费中文视频在线观看| xx视频.9999.com| 午夜精品一区二区三区在线| 欧美日韩亚洲精品一区二区三区| 日韩精品一区二区三区第95| 国产精品青青在线观看爽香蕉| 久久香蕉精品香蕉| 亚洲伊人久久综合| 久久av.com| 亚洲最新中文字幕| 国产精品露脸av在线| 亚洲激情视频网站| 91成品人片a无限观看| 日韩经典一区二区三区| 亚洲黄色片网站| 97免费中文视频在线观看| 国产精品 欧美在线| 国产91精品黑色丝袜高跟鞋| 成人信息集中地欧美| 欧美成人午夜影院| 日本在线观看天堂男亚洲| 久久久免费av| 欧美疯狂xxxx大交乱88av| 欧美激情免费视频| 91精品国产自产在线观看永久| 精品国产精品自拍| 欧美亚洲日本黄色| 欧美久久精品一级黑人c片| 精品日韩中文字幕| 久久综合久久八八| 久久精品人人爽| 亚洲激情在线观看| 欧美大秀在线观看| 国产一区av在线| 久久久免费在线观看| 欧美精品激情在线观看| 欧美成人精品激情在线观看| 国产精彩精品视频| 国产精品福利久久久| 中文字幕亚洲自拍| 97视频在线免费观看| 欧美成人免费一级人片100| 日本午夜在线亚洲.国产| 97国产精品视频| 91久久精品国产91久久| 啊v视频在线一区二区三区| 亚洲无线码在线一区观看| 国产成人jvid在线播放| 免费97视频在线精品国自产拍| 亚洲国产成人精品女人久久久| 亚洲人精选亚洲人成在线| 成人自拍性视频| 国产精品视频大全| 精品国偷自产在线视频99| 俺去了亚洲欧美日韩| 欧美一级视频免费在线观看| 美乳少妇欧美精品| 日韩av影视在线| 2018国产精品视频| 亚洲精品小视频| 久久国产色av| 91午夜理伦私人影院| 国产福利视频一区二区| 亚洲福利影片在线| 国产欧美精品日韩精品| 久久精品一偷一偷国产| 日韩一二三在线视频播| 97av在线播放| 精品国内产的精品视频在线观看| 欧美日韩中文字幕在线| 久久久亚洲精选| 国产精品嫩草影院一区二区| 欧美在线免费视频| 欧美综合激情网| 亚洲欧洲日产国产网站| 色七七影院综合| 超碰91人人草人人干| 国产丝袜视频一区| 久久久亚洲精品视频| 国外成人免费在线播放| www欧美xxxx| 亚洲国产天堂久久综合| 久久免费观看视频| 精品视频在线导航| 在线播放日韩专区| 81精品国产乱码久久久久久| 久久免费国产精品1| 亚洲天堂视频在线观看| 亚洲欧美国产高清va在线播| 亚洲国产精品美女| 日韩av网站大全| 日韩av在线天堂网| 国产免费一区视频观看免费| 亚洲第一网站免费视频| 亚洲天堂av在线免费| 日韩欧美主播在线| 亚洲一区二区三区在线免费观看| 国产精品欧美激情在线播放|