0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

有關(guān)BMP位圖的原理和解析

冬至子 ? 來源:嵌入式之入坑筆記 ? 作者:嵌入式之入坑筆記 ? 2023-05-20 16:15 ? 次閱讀

1、BMP是什么?

BMP是 Bitmap(位圖) 的簡稱,是windows顯示圖片的基本格式。

在windows下,任何格式的圖片文件(包括視頻播放)都要轉(zhuǎn)化為位圖才能顯示出來,各種各樣格式的圖片文件也都是在位圖格式的基礎(chǔ)上采用不同的壓縮算法生成的。

BMP位圖可以實現(xiàn)不作任何變換地保存圖像像素域的數(shù)據(jù),是取得RAW數(shù)據(jù)(原始數(shù)據(jù))的重要來源。

2、像素點的三種顏色 R、G、B

一般在我們的生活中見到的圖像很多是以24位圖像為主,每個顏色點由R、G、B三種顏色混合組成,一張圖片就是由很多個這樣的顏色點組成。

如果這三種顏色各用8個bit來表示,那么這樣的圖像稱為真彩色,并且這個組成圖片的數(shù)據(jù)就是BMP位圖的圖片數(shù)據(jù)。

3、RGB顏色通道

在windows下面,RGB顏色矩陣的存儲格式是BGR。24位BMP圖像稱為真彩色圖像,這種位圖沒有調(diào)色板,并且每三個字節(jié)代表一個像素,分別對應(yīng)于R、G、B。

那么位圖中所能顯示的顏色就根據(jù)位的數(shù)量進行控制,它們的關(guān)系可以有下面幾種選項:

1、BitCount = 1

表示位圖最多有兩種顏色,缺省情況下是黑色和白色,你也可以自己定義這兩種顏色。圖像信息頭調(diào)色板中將有兩個調(diào)色板項,稱為索引0和索引1。圖像數(shù)據(jù)陣列中的每一位表示一個像素。如果一個位是0,顯示時就使用索引0的RGB值,如果位是1,則使用索引1的RGB值。

2、BitCount = 4

表示位圖最多有16種顏色。每個象素用4位表示,并用這4位作為彩色表的表項來查找該象素的顏色。

例如,如果位圖中的第一個字節(jié)為0x1F,它表示有兩個象素,第一象素的顏色就在彩色表的第2表項中查找,而第二個象素的顏色就在彩色表的第16表項中查找。此時,調(diào)色板中缺省情況下會有16個RGB項。對應(yīng)于索引0到索引15。

3、BitCount=8

表示位圖最多有256種顏色。每個象素用8位表示,并用這8位作為彩色表的表項來查找該象素的顏色。

例如,如果位圖中的第一個字節(jié)為0x1F,這個像素的顏色就在彩色表的第32表項中查找。此時,缺省情況下,調(diào)色板中會有256個RGB項,對應(yīng)于索引0到索引255。

4、BitCount=16

表示位圖最多有65536種顏色。每個色素用16位(2個字節(jié))表示。這種格式叫作高彩色,或叫增強型16位色,或64K色。它的情況比較復(fù)雜。

當(dāng) biCompression成員的值是BI_RGB時,它沒有調(diào)色板。16位中,最低的5位表示藍色分量,中間的5位表示綠色分量,高的5位表示紅色分量,一共占用了15位,最高的一位保留,設(shè)為0。這種格式也被稱作555。

當(dāng)biCompression成員的值是BI_BITFIELDS,那么情況就復(fù)雜了,首先是原來調(diào)色板的位置被三個DWORD變量占據(jù),稱為紅、綠、藍掩碼。分別用于描述紅、綠、藍分量在16位中所占的位置。

5、BitCount=24

表示位圖最多有2的24次方,大約1670萬種顏色。這種位圖沒有調(diào)色板(bmiColors成員尺寸為0),在位數(shù)組中,每3個字節(jié)代表一個象素,分別對應(yīng)于顏色R、G、B。

6、BitCount=32

表示位圖最多有2的32次方種顏色。這種位圖的結(jié)構(gòu)與16位位圖結(jié)構(gòu)非常類似。

當(dāng)biCompression成員的值是BI_RGB時,它也沒有調(diào)色板,32位中有24位用于存放RGB值,順序是:最高位—保留,紅8位、綠8位、藍8位。這種格式也被成為888。

當(dāng)biCompression成員的值是BI_BITFIELDS時,原來調(diào)色板的位置將被三個DWORD變量占據(jù),成為紅、綠、藍掩碼,分別用于描述紅、綠、藍分量在32位中所占的位置。

4、BMP位圖信息

BMP位圖包含的信息主要有:位圖文件頭、位圖信息頭、位圖數(shù)據(jù),它們的基本概況如下:

1)bmp文件頭(bmp file header):提供文件的格式、大小等信息

2)位圖信息頭(bitmap information):提供圖像數(shù)據(jù)的尺寸、位平面數(shù)、壓縮方式、顏色索引等信息

3)調(diào)色板(color palette):可選,如使用索引來表示圖像,調(diào)色板就是索引與其對應(yīng)的顏色的映射表

3)位圖數(shù)據(jù)(bitmap data):就是圖像數(shù)據(jù)

5、BMP位圖的C語言代碼解析

我們知道,一個BMP位圖它包含有幾部分的內(nèi)容信息,大致如下圖所示:

圖片

從圖中我們可以分析出,如果要獲取一個位圖的完整信息,需要分別獲取文件信息頭、位圖信息頭、位圖的RGB顏色數(shù)據(jù)。下面就簡單演示一些簡單的獲取BMP位圖信息的演示代碼。

(1)文件信息頭

文件信息頭主要存放包括bmp文件的標(biāo)識、大小等的信息。

獲取文件信息頭的數(shù)據(jù)結(jié)構(gòu)可以按照如下:

typedef struct BMP_FILE_HEADER
{
WORD bType; // 文件標(biāo)識符
DWORD bSize; // 文件的大小
WORD bReserved1; // 保留值,必須設(shè)置為0
WORD bReserved2; // 保留值,必須設(shè)置為0
DWORD bOffset; // 文件頭的最后到圖像數(shù)據(jù)位開始的偏移量,
//說明從文件頭開始到實際的圖象數(shù)據(jù)之間的字節(jié)的偏移量
//因為位圖信息頭和調(diào)色板的長度會根據(jù)不同情況而變化
//所以你可以用這個偏移值迅速的從文件中讀取到位數(shù)據(jù)
} BMPFILEHEADER; // 14 字節(jié)

這個結(jié)構(gòu)體的解析如下:

圖片

(2)位圖信息頭

位圖信息頭主要存放有關(guān)位圖的圖像數(shù)據(jù)尺寸、位平面數(shù)、壓縮方式、顏色索引等信息。

位圖信息頭的數(shù)據(jù)結(jié)構(gòu)定義如下:

typedef struct BMP_INFO
{
DWORD bInfoSize; // 信息頭的大小
DWORD bWidth; // 圖像的寬度
DWORD bHeight; // 圖像的高度,如果該值是一個正數(shù),說明圖像是倒向的,如果該值是一個負數(shù),則說明圖像是正向的。
WORD bPlanes; // 圖像的位面數(shù),其值將總是被設(shè)為1
WORD bBitCount; // 每個像素的位數(shù),這里為 24位
DWORD bCompression; // 壓縮類型
DWORD bmpImageSize; // 圖像的大小,以字節(jié)為單位
DWORD bXPelsPerMeter; // 水平分辨率
DWORD bYPelsPerMeter; // 垂直分辨率
DWORD bClrUsed; // 位圖實際使用的彩色表中的顏色索引數(shù)(設(shè)為0的話,則說明使用所有調(diào)色板項)
DWORD bClrImportant; // 對圖象顯示有重要影響的顏色索引的數(shù)目,如果是0,表示都重要
} BMPINF; // 40 字節(jié)

這個結(jié)構(gòu)體的解析如下:

圖片

(3)RGB顏色陣列

RGB顏色陣列指的是BMP位圖的數(shù)據(jù),是整個圖片最終顯示出來的效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RGB
    RGB
    +關(guān)注

    關(guān)注

    4

    文章

    785

    瀏覽量

    58206
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134153
  • BMP
    BMP
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    17006
  • RAW
    RAW
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    3782
收藏 人收藏

    評論

    相關(guān)推薦

    C語言結(jié)構(gòu)體描述BMP的文件格式

      BMP文件的結(jié)構(gòu)其實非常簡單,就是兩個結(jié)構(gòu)體+一個可選的調(diào)色板+位圖數(shù)據(jù)。
    發(fā)表于 10-28 14:38 ?963次閱讀

    【安富萊】【STemWin教程】第11章 BMP圖片顯示

    google上面查找資料進行了解。這里重點的介紹一下STemWin對BMP圖片的格式的支持。 對于一些頻繁調(diào)用的BMP圖片,大家可以用第9章上面說的位圖轉(zhuǎn)換器進行圖片轉(zhuǎn)換即可,只不過本期教程是將其轉(zhuǎn)換成
    發(fā)表于 03-26 11:50

    1hid設(shè)備報告的usage minimum定義中bitmap是位圖的意思嗎為什么hid設(shè)備和位圖有關(guān)

    1hid設(shè)備報告的usage minimum定義中bitmap是位圖的意思嗎為什么hid設(shè)備和位圖有關(guān)2array是input output feature項目的數(shù)據(jù)項中array variable中的那個array嗎
    發(fā)表于 07-09 21:55

    位圖顯示問題如何解決

    硬件:STM32F103VCt6程序是參照原子歌的位圖顯示這部分。只是改變了圖片的內(nèi)容,其它的是拷貝位圖的源代碼,沒有操作系統(tǒng)。圖片是用BMPCVTST導(dǎo)的,存在內(nèi)部FLASH里,工程包含了這個文件
    發(fā)表于 05-22 14:57

    介紹內(nèi)部EEPROM數(shù)據(jù)讀取和解析

    EEPROM數(shù)據(jù)讀取和解析上一篇我們簡單介紹了熱成像傳感器德國海曼的HTPA 32x32d,本文主要進一步介紹內(nèi)部EEPROM數(shù)據(jù)讀取和解析。存儲結(jié)構(gòu)一覽在說海曼這個傳感器之前,我們先對另一個廠商
    發(fā)表于 12-07 12:14

    BMP解碼具體解析

    具體代碼及解析如下:BMP的解碼:void show_bmp(char *fname,float a,float b)//顯示BMP圖像{FIL fp;FRESULT ret;char
    發(fā)表于 02-16 07:39

    BMPtoPCB軟件的免費下載(bmp位圖轉(zhuǎn)PCB文件工具)

    BMPtoPCB是一個制作電路板PCB的小軟件,做logo的時候能夠用上,把bmp格式的圖片直接轉(zhuǎn)換成pcb的文件。 使用方法 1.首先制作一幅 BMP圖形,把你需要的漢字或記號包含在內(nèi)。然后運行本
    發(fā)表于 11-29 15:24 ?27次下載
    BMPtoPCB軟件的免費下載(<b class='flag-5'>bmp</b><b class='flag-5'>位圖</b>轉(zhuǎn)PCB文件工具)

    單色BMP位圖的顯示方法

    對于文字的顯示,英利公司已有例程進行介紹,本文將詳細介紹單色BMP位圖的顯示方法。
    的頭像 發(fā)表于 09-29 13:56 ?9591次閱讀
    單色<b class='flag-5'>BMP</b><b class='flag-5'>位圖</b>的顯示方法

    Blackfin下載產(chǎn)品代碼的位圖圖像文件(BMP)解碼器

    Blackfin下載產(chǎn)品代碼的位圖圖像文件(BMP)解碼器
    發(fā)表于 06-08 11:46 ?1次下載
    Blackfin下載產(chǎn)品代碼的<b class='flag-5'>位圖</b>圖像文件(<b class='flag-5'>BMP</b>)解碼器

    stm32單片機OLED顯示圖片 位圖轉(zhuǎn)換 Image2Lcd使用

    像素的位圖。打開導(dǎo)入圖片,在右側(cè)預(yù)覽生成的位圖。如果圖片色深不夠,會輸出為全白??赏ㄟ^調(diào)節(jié)下方的亮度滑條,使位圖正確顯示。點擊保存,會生成 .c文件。導(dǎo)入需要BMP或者jpg格式的圖
    發(fā)表于 11-18 15:51 ?16次下載
    stm32單片機OLED顯示圖片 <b class='flag-5'>位圖</b>轉(zhuǎn)換 Image2Lcd使用

    Linux下BMP圖片添加水印

    BMP是英文Bitmap(位圖)的簡寫,它是Windows操作系統(tǒng)中的標(biāo)準(zhǔn)圖像文件格式,能夠被多種Windows應(yīng)用程序所支持。隨著Windows操作系統(tǒng)的流行與豐富的Windows應(yīng)用程序的開發(fā)
    的頭像 發(fā)表于 08-16 11:20 ?1131次閱讀
    Linux下<b class='flag-5'>BMP</b>圖片添加水印

    linux下BMP圖片旋轉(zhuǎn)

    ,BMP位圖格式理所當(dāng)然地被廣泛應(yīng)用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導(dǎo)致了它與生俱來的缺點–占用磁盤空間過大。所以,目前BMP在單機上比較流行。
    的頭像 發(fā)表于 08-16 11:27 ?1266次閱讀
    linux下<b class='flag-5'>BMP</b>圖片旋轉(zhuǎn)

    Linux下BMP圖片截圖

    ,BMP位圖格式理所當(dāng)然地被廣泛應(yīng)用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導(dǎo)致了它與生俱來的缺點–占用磁盤空間過大。所以,目前BMP在單機上比較流行。
    的頭像 發(fā)表于 08-18 17:09 ?1104次閱讀

    Linux下BMP圖片縮放

    ,BMP位圖格式理所當(dāng)然地被廣泛應(yīng)用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導(dǎo)致了它與生俱來的缺點–占用磁盤空間過大。所以,目前BMP在單機上比較流行。
    的頭像 發(fā)表于 08-18 17:14 ?1838次閱讀
    Linux下<b class='flag-5'>BMP</b>圖片縮放

    bmp文件格式詳細解析

    一個bmp圖片最多由4大部分組成:BITMAPFILEHEADER結(jié)構(gòu)體,BITMAPINFOHEADER結(jié)構(gòu)體,RGBQUAD結(jié)構(gòu)體(這個結(jié)構(gòu)體可以有,也可以沒有),DIB數(shù)據(jù)區(qū)。其中DIB意思就是Device-Independent Bitmap(設(shè)備無關(guān)位圖)。
    發(fā)表于 05-09 15:08 ?0次下載