精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

有關BMP位圖的原理和解析

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

1、BMP是什么?

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

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

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

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

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

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

3、RGB顏色通道

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

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

1、BitCount = 1

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

2、BitCount = 4

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

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

3、BitCount=8

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

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

4、BitCount=16

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

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

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

5、BitCount=24

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

6、BitCount=32

表示位圖最多有2的32次方種顏色。這種位圖的結構與16位位圖結構非常類似。

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

biCompression成員的值是BI_BITFIELDS時,原來調色板的位置將被三個DWORD變量占據,成為紅、綠、藍掩碼,分別用于描述紅、綠、藍分量在32位中所占的位置。

4、BMP位圖信息

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

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

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

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

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

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

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

圖片

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

(1)文件信息頭

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

獲取文件信息頭的數據結構可以按照如下:

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

這個結構體的解析如下:

圖片

(2)位圖信息頭

位圖信息頭主要存放有關位圖的圖像數據尺寸、位平面數、壓縮方式、顏色索引等信息。

位圖信息頭的數據結構定義如下:

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

這個結構體的解析如下:

圖片

(3)RGB顏色陣列

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RGB
    RGB
    +關注

    關注

    4

    文章

    798

    瀏覽量

    58394
  • C語言
    +關注

    關注

    180

    文章

    7601

    瀏覽量

    136251
  • BMP
    BMP
    +關注

    關注

    0

    文章

    48

    瀏覽量

    17044
  • RAW
    RAW
    +關注

    關注

    0

    文章

    21

    瀏覽量

    3794
收藏 人收藏

    評論

    相關推薦

    C語言結構體描述BMP的文件格式

      BMP文件的結構其實非常簡單,就是兩個結構體+一個可選的調色板+位圖數據。
    發表于 10-28 14:38 ?1031次閱讀

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

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

    1hid設備報告的usage minimum定義中bitmap是位圖的意思嗎為什么hid設備和位圖有關

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

    位圖顯示問題如何解決

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

    介紹內部EEPROM數據讀取和解析

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

    BMP解碼具體解析

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

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

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

    單色BMP位圖的顯示方法

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

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

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

    stm32單片機OLED顯示圖片 位圖轉換 Image2Lcd使用

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

    Linux下BMP圖片添加水印

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

    linux下BMP圖片旋轉

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

    Linux下BMP圖片截圖

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

    Linux下BMP圖片縮放

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

    bmp文件格式詳細解析

    一個bmp圖片最多由4大部分組成:BITMAPFILEHEADER結構體,BITMAPINFOHEADER結構體,RGBQUAD結構體(這個結構體可以有,也可以沒有),DIB數據區。其中DIB意思就是Device-Independent Bitmap(設備無關位圖)。
    發表于 05-09 15:08 ?2次下載