<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          stm32 讀取bmp圖像的信息

          作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
          在sd卡文件系統(tǒng)下讀取bmp圖像和顯示是比較容易的,為了給jpeg解碼提供一個(gè)過(guò)程,這里我先介紹一下bmp的讀取方式

          這里主要是介紹讀取bmp信息的一些方法

          本文引用地址:http://www.ex-cimer.com/article/201611/316547.htm

          首先說(shuō)一下BMP的4個(gè)組成部分:

          1.文件頭信息塊

          0000-0001:文件標(biāo)識(shí),為字母ASCII碼“BM”。
          0002-0005:文件大小。
          0006-0009:保留,每字節(jié)以“00”填寫。
          000A-000D:記錄圖像數(shù)據(jù)區(qū)的起始位置。各字節(jié)的信息依次含義為:文件頭信息塊大小,圖像描述信息塊的大小,圖像顏色表的大小,保留(為01)。


          2.圖像描述信息塊

          000E-0011:圖像描述信息塊的大小,常為28H。
          0012-0015:圖像寬度。
          0016-0019:圖像高度。
          001A-001B:圖像的plane總數(shù)(恒為1)。
          001C-001D:記錄像素的位數(shù),很重要的數(shù)值,圖像的顏色數(shù)由該值決定。
          001E-0021:數(shù)據(jù)壓縮方式(數(shù)值位0:不壓縮;1:8位壓縮;2:4位壓縮)。
          0022-0025:圖像區(qū)數(shù)據(jù)的大小。
          0026-0029:水平每米有多少像素,在設(shè)備無(wú)關(guān)位圖(.DIB)中,每字節(jié)以00H填寫。
          002A-002D:垂直每米有多少像素,在設(shè)備無(wú)關(guān)位圖(.DIB)中,每字節(jié)以00H填寫。
          002E-0031:此圖像所用的顏色數(shù),如值為0,表示所有顏色一樣重要。

          3.顏色表

            顏色表的大小根據(jù)所使用的顏色模式而定:2色圖像為8字節(jié);16色圖像位64字節(jié);256色圖像為1024字節(jié)。其中,每4字節(jié)表示一種顏色,并以B (藍(lán)色)、G(綠色)、R(紅色)、alpha(32位位圖的透明度值,一般不需要)。即首先4字節(jié)表示顏色號(hào)1的顏色,接下來(lái)表示顏色號(hào)2的顏色,依此類推。

          4.圖像數(shù)據(jù)區(qū)

            顏色表接下來(lái)位為位圖文件的圖像數(shù)據(jù)區(qū),在此部分記錄著每點(diǎn)像素對(duì)應(yīng)的顏色號(hào),其記錄方式也隨顏色模式而定,既2色圖像每點(diǎn)占1位(8位為1字節(jié));16色圖像每點(diǎn)占4位(半字節(jié));256色圖像每點(diǎn)占8位(1字節(jié));真彩色圖像每點(diǎn)占24位(3 字節(jié))。所以,整個(gè)數(shù)據(jù)區(qū)的大小也會(huì)隨之變化。究其規(guī)律而言,可的出如下計(jì)算公式:圖像數(shù)據(jù)信息大小=(圖像寬度*圖像高度*記錄像素的位數(shù))/8。

          前三個(gè) 是我們今天要讀取的

          首先我們先用 f_open 找到我們要讀取的圖片文件的信息尤其是圖片開始的簇和指針地址。
          CurFile=BmpFileName;

          F_Open(CurFile);//打開文件
          F_Read(CurFile,jpg_buffer);//讀出512個(gè)字節(jié)
          pbmp=(BITMAPINFO*)jpg_buffer;//得到BMP的頭部信息

          這是我摘借的幾句程序
          第二句 把讀出的bmp文件信息存在buffer中
          第三句 這句話是我們今天重點(diǎn)說(shuō)的
          =(BITMAPINFO*)jpg_buffer 強(qiáng)制轉(zhuǎn)換為 (BITMAPINFO)指針類型

          typedef __packed struct
          {
          BITMAPFILEHEADER bmfHeader;// 1.文件頭信息塊
          BITMAPINFOHEADER bmiHeader;//2.圖像描述信息塊
          RGBQUAD bmiColors[1];// 3.顏色表
          }BITMAPINFO;

          第3句話 強(qiáng)制轉(zhuǎn)化buffer數(shù)組 到這個(gè)結(jié)構(gòu)體
          實(shí)際上數(shù)組和結(jié)構(gòu)體是一樣的 不一樣的是結(jié)構(gòu)體 有個(gè)最小結(jié)構(gòu)對(duì)齊的問題(這個(gè)在本壇有詳細(xì)講解)。
          對(duì)照著樓上各個(gè)信息快 信息字節(jié) 寫出結(jié)構(gòu)體:
          //BMP頭文件
          typedef __packed struct
          {
          WORDbfType ; //文件標(biāo)志.只對(duì)BM,用來(lái)識(shí)別BMP位圖類型
          DWORD bfSize ; //文件大小,占四個(gè)字節(jié)
          WORDbfReserved1 ;//保留
          WORDbfReserved2 ;//保留
          DWORD bfOffBits ;//從文件開始到位圖數(shù)據(jù)(bitmap data)開始之間的的偏移量
          }BITMAPFILEHEADER ;
          //BMP信息頭
          typedef __packed struct
          {
          DWORD biSize ; //說(shuō)明BITMAPINFOHEADER結(jié)構(gòu)所需要的字?jǐn)?shù)。
          LONGbiWidth ; //說(shuō)明圖象的寬度,以象素為單位
          LONGbiHeight ; //說(shuō)明圖象的高度,以象素為單位
          WORDbiPlanes ; //為目標(biāo)設(shè)備說(shuō)明位面數(shù),其值將總是被設(shè)為1
          WORDbiBitCount ; //說(shuō)明比特?cái)?shù)/象素,其值為1、4、8、16、24、或32
          DWORD biCompression ;//說(shuō)明圖象數(shù)據(jù)壓縮的類型。其值可以是下述值之一:
          //BI_RGB:沒有壓縮;
          //BI_RLE8:每個(gè)象素8比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成(重復(fù)象素計(jì)數(shù)和顏色索引);
          //BI_RLE4:每個(gè)象素4比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成
          //BI_BITFIELDS:每個(gè)象素的比特由指定的掩碼決定。
          DWORD biSizeImage ;//說(shuō)明圖象的大小,以字節(jié)為單位。當(dāng)用BI_RGB格式時(shí),可設(shè)置為0
          LONGbiXPelsPerMeter ;//說(shuō)明水平分辨率,用象素/米表示
          LONGbiYPelsPerMeter ;//說(shuō)明垂直分辨率,用象素/米表示
          DWORD biClrUsed ; //說(shuō)明位圖實(shí)際使用的彩色表中的顏色索引數(shù)
          DWORD biClrImportant ; //說(shuō)明對(duì)圖象顯示有重要影響的顏色索引的數(shù)目,如果是0,表示都重要。
          }BITMAPINFOHEADER ;
          //彩色表
          typedef __packed struct
          {
          BYTE rgbBlue ; //指定藍(lán)色強(qiáng)度
          BYTE rgbGreen ; //指定綠色強(qiáng)度
          BYTE rgbRed ; //指定紅色強(qiáng)度
          BYTE rgbReserved ;//保留,設(shè)置為0
          }RGBQUAD ;
          這樣我們可以通過(guò)結(jié)構(gòu)體 得到bmp文件任何一個(gè)信息。

          下次接著來(lái) 直到顯示解碼顯示然后再上傳移植文件



          關(guān)鍵詞: stm32讀取bmp圖

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();