面向小白BMP檔案詳細解析

2021-10-06 04:53:48 字數 1857 閱讀 9676

最近做實驗需要用到一些bmp檔案,慚愧的發現自己根本不知道該怎麼用,查了查資料更慚愧的發現自己對電腦裡面各種檔案的儲存方式和資料結構一點了解也沒有,那就開始學一下記點筆記,如果有錯的地方希望看到的朋友不吝賜教。該文章基於另一位博主的python讀取並解析 bmp 檔案完成,是對bmp檔案的一些學習筆記,有需要具體讀取**的朋友可以去超連結內找尋。

bmp檔案

資料在計算機中只能一維儲存,一段一維的bmp資料大概就長下面那個樣子,對我們來說最為有用的、也就是我們眼睛所看到的影象自身的資訊便儲存在bmp檔案中的點陣圖資訊部分。其他部分各有各的作用。

檔案頭一圖簡介

bmp檔案頭內包含檔案最為基礎的資訊,在下圖我隨便選取了乙個bmp檔案使用python提取了它的檔案頭資訊(\x00佔據乙個位元組長度代表0)。

bmp檔案的檔案型別均為『bm』(如下所示);後面的【f u \x00 \x00】代表檔案的大小,讀的方式為 0 0 u f,u和f為ascii碼的117和102,檔案大小就是117*256+102=30054;後面4位0為保留位置全部為0;最後的【6 \x00 \x00 \x00】代表位圖距離偏移量,讀的方式為0 0 0 6,6為ascii碼的54,位圖偏移量即為54;也就是說我們這張沒有調色盤資訊,的儲存為14位元組檔案頭+40位元組資訊頭+30000位元組位圖資訊。

資訊頭一圖簡介

資訊頭的長度為40位,各部分儲存的資訊如下圖所示,我會在後面結合測試圖說明各部分的具體意義。

然後是接下來的16位。前四位是壓縮型別【\x00\x00\x00\x00】十六進製制的0也就是無壓縮;接下來的四位是影象大小【0 u \x00 \x00】117*256+48=30000沒毛病嗷;後面八位均為0也就是沒有給出水平解析度和垂直解析度資訊。

最後八位均為0說明使用所有調色盤項和無重要顏色。

位圖資訊

bmp的點陣圖儲存方式為標準計算機座標系,舉個例子,我們人眼看到的如下所示的,bmp的儲存方式為789456123,且其儲存方式為bgr三通道,假設三通道的畫素值均為下圖所示,該的bmp點陣圖資訊為777888999444555666111222333。得知了這些資訊以後,我們便可以根據檔案頭和資訊頭中的各種資訊提取bmp的檔案。

下圖就是我們測試圖的點陣圖資訊,我們可以每三個數值做一次提取,提取100次組成一行,重複100次完成該張100x100x3的影象提取。

結果圖如下

bmp檔案解析

size xx large 解析bmp影象 size 今天做了乙個很好玩的東西 bmp解析器。剛看到的時候我覺得超難,完全不 懂,做出來之後,覺得其實很簡單!接下來就讓我來介紹一下吧!在真正做解析器之前我們應該先了解一些基礎知識!size x large 位運算 size size large 1....

BMP檔案解析

目錄c語言 乙個問題 完整程式 bmp 全稱bitmap 是windows作業系統中的標準影象檔案格式,可以分成兩類 裝置有向量相關位圖 ddb 和裝置無向量相關位圖 dib 使用非常廣。它採用位對映儲存格式,除了影象深度可選以外,不採用其他任何壓縮,因此,bmp檔案所占用的空間很大。bmp檔案的影...

BMP檔案結構解析

一 bmp檔案結構 bmp檔案組成 bmp檔案由檔案頭 位圖資訊頭 顏色資訊和圖形資料四部分組成。bmp檔案頭 bmp檔案頭資料結構含有bmp檔案的型別 檔案大小和點陣圖起始位置等資訊。其結構定義如下 typedef struct tagbitmapfileheader bitmapfilehead...