日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java dib文件 加位图文件头_位图(bmp)文件格式分析

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java dib文件 加位图文件头_位图(bmp)文件格式分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

位圖(bmp)文件格式分析

作者:深藍(由博主分享)

一、什么是位圖

計算機能以位圖和矢量圖格式顯示圖像。

1、位圖(Bitmap):

圖像又稱點陣圖或光柵圖,它使用我們稱為像素(象素,Pixel)的一格一格的小點來描述圖像。計算機屏幕其實就是一張包含大量像素點的網格。當我們把位圖放大時,每一個像素小點看上去就像是一個個馬賽克色塊。

2、矢量圖(Vector)

使用直線和曲線來描述圖形,這些圖形的元素是一些點、線、矩形、多邊形、圓和弧線等等,它們都是通過數學公式計算獲得的。

位圖和矢量圖最簡單的區別就是:矢量圖可以無限放大,而且不會失真;而位圖則不能。

像Photoshop(PS)這樣主要用于處理位圖的軟件,我們稱之為圖像處理軟件;專門處理矢量圖的軟件,我們稱之為圖形設計軟件,例如Adobe Illustrator,CorelDRAW,Flash MX等。

二、BMP位圖文件

常見的圖像文件格式有:BMP、JPG(JPE,JPEG)、GIF等。

BMP圖像文件(Bitmap-File)格式是Windows采用的圖像文件存儲格式,在Windows環境下運行的所有圖像處理軟件都支持這種格式。Windows 3.0以后的BMP文件都是指設備無關位圖(DIB,device-independent bitmap)。BMP位圖文件默認的文件擴展名是.BMP,有時它也會以.DIB或.RLE作擴展名。

注:本文采用lena.bmp(512×512)做例子:

1、BMP文件結構

BMP文件由4部分組成:

1.?? 位圖文件頭(bitmap-file header)

2.?? 位圖信息頭(bitmap-informationheader)

3.?? 顏色表(color table)

4.?? 顏色點陣數據(bits data)

24位真彩色位圖沒有顏色表,所以只有1、2、4這三部分。

用UltraEdit打開lena.bmp,可以看到這個文件的全部數據如下圖所示:

1、1位圖文件頭

位圖文件頭分4部分,共14字節:

名稱

占用空間

內容

實際數據

bfType

2字節

標識,就是“BM”二字

BM

bfSize

4字節

整個BMP文件的大小

0x000C0036(786486)

bfReserved1/2

4字節

保留字,沒用

0

bfOffBits

4字節

偏移數,即 位圖文件頭+位圖信息頭+調色板 的大小

0x36(54)

注意,Windows的數據是倒著念的,這是PC電腦的特色。如果一段數據為50?1A?25 3C,倒著念就是3C 25 1A50,即0x3C251A50。因此,如果bfSize的數據為36 00 0C 00,實際上就成了0x000C0036,也就是0xC0036。

1、2位圖信息頭

位圖信息頭共40字節:

名稱

占用空間

內容

實際數據

biSize

4字節

位圖信息頭的大小,為40

0x28(40)

biWidth

4字節

位圖的寬度,單位是像素

0x200(512)

biHeight

4字節

位圖的高度,單位是像素

0x200(512)

biPlanes

2字節

固定值1

1

biBitCount

2字節

每個像素的位數

1-黑白圖,4-16色,8-256色,24-真彩色

0x18(24)

biCompression

4字節

壓縮方式,BI_RGB(0)為不壓縮

0

biSizeImage

4字節

位圖全部像素占用的字節數,BI_RGB時可設為0

0x0C

biXPelsPerMeter

4字節

水平分辨率(像素/米)

0

biYPelsPerMeter

4字節

垂直分辨率(像素/米)

0

biClrUsed

4字節

位圖使用的顏色數

如果為0,則顏色數為2的biBitCount次方

0

biClrImportant

4字節

重要的顏色數,0代表所有顏色都重要

0

作為真彩色位圖,我們主要關心的是biWidth和biHeight這兩個數值,兩個數值告訴我們圖像的尺寸。biSize,biPlanes,biBitCount這幾個數值是固定的。想偷懶的話,其它的數值可以一律用0來填充。

1、3顏色表

24位真彩色位圖沒有顏色表。為了簡化,只討論24位真彩色位圖。

1、4顏色點陣數據

位圖全部的像素,是按照自下向上,自左向右的順序排列的。

RGB數據也是倒著念的,原始數據是按B、G、R的順序排列的。

三、Photoshop和Windows的BMP文件比較

Windows的BMP文件最后少了兩個0字節,沒有整體補位。bfSize(文件大小),biSizeImage(全部像素大小)也相應地減去2。

打開Photoshop,新建一個尺寸為2*3像素的文件:

放大圖片到最大(1600%),然后用鉛筆工具對每個像素都點一個不同顏色的點,如下圖所示:

儲存這個文件為BMP格式,文件名為“MyBmp.bmp”,在BMP選項中選擇Windows,24位:

你應該注意到圖中用黑色框起來的00 00了,在每行顏色的末尾添加的兩個0字節,是為了行補位。為什么要行補位呢?因為32位的Windows操作系統處理4個字節(32位)的速度比較快,所以BMP的每一行顏色占用的字節數規定為4的整數倍。MyBmp.bmp中一行顏色有兩個像素,共占用6字節,如果要補齊4*2=8字節,就要再加兩個0字節。

行補位的公式為:widthBytes = (width*biBitCount+31)/32*4

參數說明:

Width:位圖的實際寬度

biBitCount:每個像素的位數

1-黑白圖,4-16色,8-256色,24-真彩色

注:Phtoshop在文件的末尾還補充了兩個0字節,好像是要整體補位。不過我看過的BMP資料中都沒有提到還要整體補位的,其它軟件生成的BMP文件也沒有整體補位的,這看起來像是Adobe的獨創,不知道目的何在。

PS:文章最后注的內容將由下篇文章解釋

總結

以上是生活随笔為你收集整理的java dib文件 加位图文件头_位图(bmp)文件格式分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。