bmp文件头_图像算法原理与实践——图像文件存储
圖像數(shù)據(jù)在計算機(jī)儲器設(shè)備中的存儲形式是圖像文件,圖像必須按照某個公開的、規(guī)范約終結(jié)定的數(shù)據(jù)存儲順序和結(jié)構(gòu)進(jìn)行保存,才能使不同的程序?qū)D像文件順利進(jìn)行打開或存盤操作,實(shí)現(xiàn)數(shù)據(jù)共享。圖像數(shù)據(jù)在文件中的存儲順序和結(jié)構(gòu)稱為圖像文件格式。目前主流的圖像文件格式有 .bmp; .jpg;.jpeg;.png;.gif;.webp;.tiff;.psd 等各種不同的文件格式。在這些圖像格式中大部分的格式,都是將像素數(shù)據(jù)經(jīng)過壓縮編碼后進(jìn)行保存的,這里涉及到比較復(fù)雜的圖像壓縮算法等操作,只有BMP格式的文件是支持原始圖像數(shù)據(jù)保存的,本章重點(diǎn)針對BMP文件格式進(jìn)行詳細(xì)講述。
BMP(全稱Bitmap)是Windows操作系統(tǒng)中的標(biāo)準(zhǔn)圖像文件格式,可以分成兩類:設(shè)備相關(guān)位圖(DDB)和設(shè)備無關(guān)位圖(DIB),使用非常廣。它采用位映射存儲格式,除了圖像深度可選以外,不采用其他任何壓縮,因此,BMP文件所占用的空間很大。BMP文件的圖像深度可選 1bit、4bit、8bit及24bit。BMP文件存儲數(shù)據(jù)時,圖像的掃描方式是按從左到右、從下到上的順序。由于BMP文件格式是Windows環(huán)境中交換與圖有關(guān)的數(shù)據(jù)的一種標(biāo)準(zhǔn),因此在Windows環(huán)境中運(yùn)行的圖形圖像軟件都支持BMP圖像格式。在Windows系統(tǒng)平臺上和Android手機(jī)上,直接使用系統(tǒng)默認(rèn)的圖片瀏覽器即可打開。
一、BMP文件格式詳解
BMP文件總共由四個部分構(gòu)成:
(1)BMP文件頭(bmp file header):提供文件的格式、大小等信息
(2)位圖信息頭(bitmap information):提供圖像數(shù)據(jù)的尺寸、位平面數(shù)、壓縮方式、顏色索引等信息
(3)調(diào)色板(color palette):可選,如使用索引來表示圖像,調(diào)色板就是索引與其對應(yīng)的顏色的映射表,在使用 256位彩色、16位彩色等情況下用到
(4)位圖數(shù)據(jù)(bitmap data):就是圖像的像素數(shù)據(jù)
BMP文件總的構(gòu)成1、BMP文件頭部分
固定占用14個字節(jié),包括文件類型表示、文件大小、像素數(shù)據(jù)偏移等信息
2、位圖信息頭
固定占用40個字節(jié),包含了圖像的基本新,例如:像素的寬度、高度、色彩格式位數(shù)、是否有壓縮(絕大部分情況下無壓縮)等。
3、調(diào)色板信息
這一項(xiàng)是可選項(xiàng),適用于索引方式偽彩色的圖像數(shù)據(jù)。調(diào)色板其實(shí)是一張映射表,標(biāo)識顏色索引號與其代表的顏色的對應(yīng)關(guān)系??偣灿?56個索引,每個索引對應(yīng)一個RGBA四字節(jié)的色彩值,而后續(xù)位圖數(shù)據(jù)只需要保存每個像素點(diǎn)的索引,根據(jù)索引找到對應(yīng)的RGBA數(shù)據(jù)值。根據(jù)索引列表大小,該部分信息總計占用 256*4=1024個字節(jié)。
偽彩色方式在過去計算機(jī)存儲空間不足的情況下,采用的一種平衡內(nèi)存和效果的方式,由于現(xiàn)在硬件成本的大幅度下降,所以現(xiàn)在這種方式在絕大部分甚至嵌入式設(shè)備上也很少使用了,因此本章節(jié)也不對該部分詳細(xì)講述。
4、位圖數(shù)據(jù)
這部分存放的就是詳細(xì)的每個像素的RGB或者RGBA數(shù)據(jù)。存放順序從左到右、從下到上的順序存放。 這里有兩點(diǎn)需要注意一下:
(1)像素RGB值存放時,先存放圖像最下面一行數(shù)據(jù),然后再存放下面倒數(shù)第二行數(shù)據(jù),所以存放順序是倒的,這個跟正常瀏覽順序不一樣。
(2)每一行像素數(shù)據(jù)需要保證4字節(jié)對齊,不對齊的需要補(bǔ)充空字節(jié),這個是BMP文件格式本身要求的。對于RGBA 32位色彩格式來說沒有任何問題,但是對于Gray或者RGB格式的數(shù)據(jù) ,有時一行像素需要補(bǔ)充一些空字節(jié)。例如:對于寬高為 322*240 像素的RGB數(shù)據(jù),正常計算一行像素數(shù)據(jù)需要 322 * 3= 966字節(jié),但是966不是四字節(jié)對齊,所以在存儲時,每行的像素數(shù)據(jù)要保存為 968字節(jié),最后2個字節(jié)保留。
二、BMP文件讀寫操作
針對如上的BMP文件格式,我們使用C語言來實(shí)現(xiàn)對于.bmp文件的讀寫操作,考慮到調(diào)色板格式的色彩格式現(xiàn)在幾乎不再使用,因此我們代碼中也不考慮這種情況。
//總結(jié)
本章主要講解了對于非壓縮的RGB、RGBA像素格式的圖像數(shù)據(jù)保存到.bmp文件的方法。.bmp文件是使用最廣泛的文件格式之一,支持的平臺眾多,也是存儲和加載最方便的一種圖像格式。在后續(xù)教程中,我們可以隨時將算法處理過程中的圖像數(shù)據(jù)保存下來查看圖像內(nèi)容,從而方便調(diào)試。而其他格式的圖片可以通過工具方便的轉(zhuǎn)換為.bmp圖片,在Windows平臺上最簡單的一種方式是:使用Windows系統(tǒng)自帶的畫圖程序,打開任意格式的圖像文件,然后選擇另存為 .bmp即可。
文章系列目錄
華叔-視覺魔術(shù)師:圖像算法原理與實(shí)踐——緒論?zhuanlan.zhihu.com總結(jié)
以上是生活随笔為你收集整理的bmp文件头_图像算法原理与实践——图像文件存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画子图_Python使用ad
- 下一篇: snort入侵检测系统下载Linux,入