<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-57  評論-202  文章-17  trackbacks-0
    6.1 BMP文件格式

    6.1.1 簡介

    位圖文件(Bitmap-File,BMP)格式是Windows采用的圖像文件存儲格式,在Windows環境下運行的所有圖像處理軟件都支持這種格式。Windows 3.0以前的BMP位圖文件格式與顯示設備有關,因此把它稱為設備相關位圖(device-dependent bitmap,DDB)文件格式。Windows 3.0以后的BMP位圖文件格式與顯示設備無關,因此把這種BMP位圖文件格式稱為設備無關位圖(device-independent bitmap,DIB)格式,目的是為了讓Windows能夠在任何類型的顯示設備上顯示BMP位圖文件。BMP位圖文件默認的文件擴展名是BMP或者bmp。

    6.1.2 文件結構

    位圖文件可看成由4個部分組成:位圖文件頭(bitmap-file header)、位圖信息頭(bitmap-information header)、彩色表(color table)和定義位圖的字節陣列,它們的名稱和符號如表6-01所示。

    表6-01 BMP圖像文件組成部分的名稱和符號

    位圖文件的組成

    結構名稱

    符號

    位圖文件頭(bitmap-file header)

    BITMAPFILEHEADER

    bmfh

    位圖信息頭(bitmap-information header)

    BITMAPINFOHEADER

    bmih

    彩色表(color table)

    RGBQUAD

    aColors[]

    圖像數據陣列字節

    BYTE

    aBitmapBits[]

    位圖文件結構可綜合在表6-02中。

    表6-02 位圖文件結構內容摘要

     

    偏移量

    域的名稱

    大小

    內容

     

     

     

    圖像文件

    0000h

    標識符(Identifier)

    2 bytes

    兩字節的內容用來識別位圖的類型:

    BM : Windows 3.1x, 95, NT,

    BA :OS/2 Bitmap Array

    CI :OS/2 Color Icon

    CP :OS/2 Color Pointer

    IC : OS/2 Icon

    PT :OS/2 Pointer

     

    0002h

    File Size

    1 dword

    用字節表示的整個文件的大小

     

    0006h

    Reserved

    1 dword

    保留,設置為0

     

    000Ah

    Bitmap Data Offset

    1 dword

    從文件開始到位圖數據開始之間的數據(bitmap data)之間的偏移量

     

    000Eh

    Bitmap Header Size

    1 dword

    位圖信息頭(Bitmap Info Header)的長度,用來描述位圖的顏色、壓縮方法等。下面的長度表示:

    28h - Windows 3.1x, 95, NT,

    0Ch - OS/2 1.x

    F0h - OS/2 2.x

     

    0012h

    Width

    1 dword

    位圖的寬度,以像素為單位

     

    0016h

    Height

    1 dword

    位圖的高度,以像素為單位

     

    001Ah

    Planes

    1 word

    位圖的位面數


    圖像

    信息

     

     

    001Ch

    Bits Per Pixel

    1 word

    每個像素的位數

    1 - Monochrome bitmap

    4 - 16 color bitmap

    8 - 256 color bitmap

    16 - 16bit (high color) bitmap

    24 - 24bit (true color) bitmap

    32 - 32bit (true color) bitmap

     

    001Eh

    Compression

    1 dword

    壓縮說明:

    0 - none (也使用BI_RGB表示)

    1 - RLE 8-bit / pixel (也使用BI_RLE4表示)

    2 - RLE 4-bit / pixel (也使用BI_RLE8表示)

    3 - Bitfields (也使用BI_BITFIELDS表示)

     

    0022h

    Bitmap Data Size

    1 dword

    用字節數表示的位圖數據的大小。該數必須是4的倍數

     

    0026h

    HResolution

    1 dword

    用像素/米表示的水平分辨率

     

    002Ah

    VResolution

    1 dword

    用像素/米表示的垂直分辨率

     

    002Eh

    Colors

    1 dword

    位圖使用的顏色數。如8-位/像素表示為100h或者 256.

     

    0032h

    Important Colors

    1 dword

    指定重要的顏色數。當該域的值等于顏色數時,表示所有顏色都一樣重要

    調色板數據

    0036h

    Palette

    N * 4 byte

    調色板規范。對于調色板中的每個表項,這4個字節用下述方法來描述RGB的值:

    • 1字節用于藍色分量
    • 1字節用于綠色分量
    • 1字節用于紅色分量
    • 1字節用于填充符(設置為0)

    圖像數據

    0436h

    Bitmap Data

    x bytes

    該域的大小取決于壓縮方法,它包含所有的位圖數據字節,這些數據實際就是彩色調色板的索引號

     

    6.1.3 構件詳解

    1. 位圖文件頭

    位圖文件頭包含有關于文件類型、文件大小、存放位置等信息,在Windows 3.0以上版本的位圖文件中用BITMAPFILEHEADER結構來定義:

    typedef struct tagBITMAPFILEHEADER { /* bmfh */

    UINT bfType;

    DWORD bfSize;

    UINT bfReserved1;

    UINT bfReserved2;

    DWORD bfOffBits;

    } BITMAPFILEHEADER;

    其中:

    bfType

    說明文件的類型.

    bfSize

    說明文件的大小,用字節為單位

    bfReserved1

    保留,設置為0

    bfReserved2

    保留,設置為0

    bfOffBits

    說明從BITMAPFILEHEADER結構開始到實際的圖像數據之間的字 節偏移量

     

    2. 位圖信息頭

    位圖信息用BITMAPINFO結構來定義,它由位圖信息頭(bitmap-information header)和彩色表(color table)組成,前者用BITMAPINFOHEADER結構定義,后者用RGBQUAD結構定義。BITMAPINFO結構具有如下形式:

    typedef struct tagBITMAPINFO { /* bmi */

    BITMAPINFOHEADER bmiHeader;

    RGBQUAD bmiColors[1];

    } BITMAPINFO;

    其中:

    bmiHeader

    說明BITMAPINFOHEADER結構

    bmiColors

    說明彩色表RGBQUAD結構的陣列

    BITMAPINFOHEADER結構包含有位圖文件的大小、壓縮類型和顏色格式,其結構定義為:

    typedef struct tagBITMAPINFOHEADER { /* bmih */

    DWORD biSize;

    LONG biWidth;

    LONG biHeight;

    WORD biPlanes;

    WORD biBitCount;

    DWORD biCompression;

    DWORD biSizeImage;

    LONG biXPelsPerMeter;

    LONG biYPelsPerMeter;

    DWORD biClrUsed;

    DWORD biClrImportant;

    } BITMAPINFOHEADER;

    其中:

    biSize

    說明BITMAPINFOHEADER結構所需要的字節數

    biWidth

    說明圖像的寬度,以像素為單位

    biHeight

    說明圖像的高度,以像素為單位

    biPlanes

    為目標設備說明位面數,其值設置為1

    biBitCount

    說明位數/像素,其值為1、2、4或者24

    biCompression

    • 說明圖像數據壓縮的類型。其值可以是下述值之一:
      BI_RGB:沒有壓縮;
    • BI_RLE8:每個像素8位的RLE壓縮編碼,壓縮格式由2字節組成(重復像素計數和顏色索引);
    • BI_RLE4:每個像素4位的RLE壓縮編碼,壓縮格式由2字節組成

    biSizeImage

    說明圖像的大小,以字節為單位。當用BI_RGB格式時,可設置為0

    biXPelsPerMeter

    說明水平分辨率,用像素/米表示

    biYPelsPerMeter

    說明垂直分辨率,用像素/米表示

    biClrUsed

    說明位圖實際使用的彩色表中的顏色索引數

    biClrImportant

    說明對圖像顯示有重要影響的顏色索引的數目,如果是0,表示都重要。

    現就BITMAPINFOHEADER結構作如下說明:

    (1) 彩色表的定位

    應用程序可使用存儲在biSize成員中的信息來查找在BITMAPINFO結構中的彩色表,如下所示:

    pColor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo->bmiHeader.biSize))

    (2) biBitCount

    biBitCount=1 表示位圖最多有兩種顏色,黑色和白色。圖像數據陣列中的每一位表示一個像素。

    biBitCount=4 表示位圖最多有16種顏色。每個像素用4位表示,并用這4位作為彩色表的表項來查找該像素的顏色。例如,如果位圖中的第一個字節為0x1F,它表示有兩個像素,第一像素的顏色就在彩色表的第2表項中查找,而第二個像素的顏色就在彩色表的第16表項中查找。

    biBitCount=8 表示位圖最多有256種顏色。每個像素用8位表示,并用這8位作為彩色表的表項來查找該像素的顏色。例如,如果位圖中的第一個字節為0x1F,這個像素的顏色就在彩色表的第32表項中查找。

    biBitCount=24 表示位圖最多有224=16 777 216種顏色。bmiColors (或者bmciColors)成員就為NULL。每3個字節代表一個像素,其顏色有R、G、B字節的相對強度決定。

    (3) ClrUsed

    BITMAPINFOHEADER結構中的成員ClrUsed指定實際使用的顏色數目。如果ClrUsed設置成0,位圖使用的顏色數目就等于biBitCount成員中的數目。

    (4) 圖像數據壓縮

    ① BI_RLE8:每個像素為8位的RLE壓縮編碼,可使用編碼方式和絕對方式中的任何一種進行壓縮,這兩種方式可在同一幅圖中的任何地方使用。

    編碼方式:由2個字節組成,第一個字節指定使用相同顏色的像素數目,第二個字節指定使用的顏色索引。此外,這個字節對中的第一個字節可設置為0,聯合使用第二個字節的值表示:

    • 第二個字節的值為0:行的結束。
    • 第二個字節的值為1:圖像結束。
    • 第二個字節的值為2:其后的兩個字節表示下一個像素從當前開始的水平和垂直位置的偏移量。

    絕對方式:第一個字節設置為0,而第二個字節設置為0x03~0xFF之間的一個值。在這種方式中,第二個字節表示跟在這個字節后面的字節數,每個字節包含單個像素的顏色索引。壓縮數據格式需要字邊界(word boundary)對齊。

    [例6.1] 用十六進制表示的8位壓縮圖像數據如下:

    03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01 02 78 00 00 09 1E 00 01
    這些壓縮數據可解釋為 :

    壓縮數據

    擴展數據

    03 04

    04 04 04

    05 06

    06 06 06 06 06

    00 03 45 56 67 00

    45 56 67

    02 78

    78 78

    00 02 05 01

    從當前位置右移5個位置后向下移一行

    02 78

    78 78

    00 00

    行結束

    09 1E

    1E 1E 1E 1E 1E 1E 1E 1E 1E

    00 01

    RLE編碼圖像結束

    ② BI_RLE4:每個像素為4位的RLE壓縮編碼,同樣也可使用編碼方式和絕對方式中的任何一種進行壓縮,這兩種方式也可在同一幅圖中的任何地方使用。這兩種方式是:

    編碼方式:由2個字節組成,第一個字節指定像素數目,第二個字節包含兩種顏色索引,一個在高4位,另一個在低4位。第一個像素使用高4位的顏色索引,第二個使用低4位的顏色索引,第3個使用高4位的顏色索引,依此類推。

    絕對方式:這個字節對中的第一個字節設置為0,第二個字節包含有顏色索引數,其后續字節包含有顏色索引,顏色索引存放在該字節的高、低4位中,一個顏色索引對應一個像素。此外,BI_RLE4也同樣聯合使用第二個字節中的值表示:

    • 第二個字節的值為0:行的結束。
    • 第二個字節的值為1:圖像結束。
    • 第二個字節的值為2:其后的兩個字節表示下一個像素從當前開始的水平和垂直位置的偏移量。

    [例6.2] 用十六進制數表示的4位壓縮圖像數據:

    03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 04 78 00 00 09 1E 00 01

    這些壓縮數據可解釋為 :

    壓縮數據

    擴展數據

    03 04

    0 4 0

    05 06

    0 6 0 6 0

    00 06 45 56 67 00

    4 5 5 6 6 7

    04 78

    7 8 7 8

    00 02 05 01

    從當前位置右移5個位置后向下移一行

    04 78

    7 8 7 8

    00 00

    行結束

    09 1E

    1 E 1 E 1 E 1 E 1

    00 01

    RLE圖像結束

     

    3. 彩色表

    彩色表包含的元素與位圖所具有的顏色數相同,像素的顏色用RGBQUAD結構來定義。對于24-位真彩色圖像就不使用彩色表,因為位圖中的RGB值就代表了每個像素的顏色。彩色表中的顏色按顏色的重要性排序,這可以輔助顯示驅動程序為不能顯示足夠多顏色數的顯示設備顯示彩色圖像。RGBQUAD結構描述由R、G、B相對強度組成的顏色,定義如下:

    typedef struct tagRGBQUAD { /* rgbq */

    BYTE rgbBlue;

    BYTE rgbGreen;

    BYTE rgbRed;

    BYTE rgbReserved;

    } RGBQUAD;

    其中:

    rgbBlue

    指定藍色強度

    rgbGreen

    指定綠色強度

    rgbRed

    指定紅色強度

    rgbReserved

    保留,設置為0

     

    4. 位圖數據

    緊跟在彩色表之后的是圖像數據字節陣列。圖像的每一掃描行由表示圖像像素的連續的字節組成,每一行的字節數取決于圖像的顏色數目和用像素表示的圖像寬度。掃描行是由底向上存儲的,這就是說,陣列中的第一個字節表示位圖左下角的像素,而最后一個字節表示位圖右上角的像素。

    posted on 2005-06-22 16:50 小米 閱讀(26779) 評論(9)  編輯  收藏 所屬分類: 其它

    評論:
    # re: BMP文件格式 2006-07-06 17:07 | yanglei
    askjsd
      回復  更多評論
      
    # re: BMP文件格式 2006-07-19 14:02 | 1
    000  回復  更多評論
      
    # re: BMP文件格式 2007-11-07 16:55 | 中華信鴿
    又學到一點:)  回復  更多評論
      
    # re: BMP文件格式 2007-12-19 19:22 | guest
    你的博客真的很好  回復  更多評論
      
    # thsgjnnc 2008-02-06 00:58 | thsgjnnc
    karqfbav http://clnwqqbi.com mqqpexnq aisnmmtj  回復  更多評論
      
    # re: BMP文件格式 2008-03-01 18:17 | 隨心high
    好  回復  更多評論
      
    # re: BMP文件格式 2008-07-21 10:11 | spiet
    thank u very much  回復  更多評論
      
    # re: BMP文件格式 2008-11-04 11:07 | asf
    very very good  回復  更多評論
      
    # re: BMP文件格式 2013-11-09 14:05 | 見面
    luchuan1985:(19:39:24)
    您是要什么呢
    aisaiweier:(19:39:46)
    測試紙犬瘟疫苗
    luchuan1985:(19:40:51)
    滿百包郵的親
    aisaiweier:(19:43:30)
    貨到付款多少包郵,有沒有買一包郵品包首重的,手續費多少,山東鄄城,幾天到
    aisaiweier:(19:43:34)

    aisaiweier:(19:44:05)

    luchuan1985:(19:44:53)
    貨到付款不包郵,手續費5元,3天左右到
    aisaiweier:(19:45:54)
    有沒有買一包郵品包首重的
    luchuan1985:(19:47:24)
    貨到付款不包郵的,是包郵的商品也不包
    aisaiweier:(20:32:26)
    測試紙犬瘟疫苗有嗎
    luchuan1985:(20:32:41)
    試紙有
    aisaiweier:(21:29:18)
    店鋪名
    luchuan1985:(21:29:40)
    愛寵舍
    aisaiweier:(21:29:47)
    我買測試紙
    aisaiweier:(21:30:04)
    1天能到不
    luchuan1985:(21:30:39)
    周一發貨
    aisaiweier:(21:32:58)
    我今天提交訂單,快遞10元,最快的快遞
    luchuan1985:(21:33:34)
    周一發貨哦親
    aisaiweier:(21:34:17)
    明天行不
    aisaiweier:(21:34:29)
    中午
    luchuan1985:(21:34:31)
    庫房休息哦
    aisaiweier:(21:34:42)
    急用
    aisaiweier:(21:34:58)
    手續費10元
    luchuan1985:(21:35:25)
    庫房沒人,只能周一發
    aisaiweier:(21:36:12)
    你呢
    luchuan1985:(21:36:39)
    我是客服,進不了庫房
    aisaiweier:(21:42:11)
    什么時候到
    aisaiweier:(21:42:39)

    luchuan1985:(21:42:45)
    貨到付款?
    aisaiweier:(21:42:54)

    aisaiweier:(21:44:10)
    怎么了
    luchuan1985:(21:44:25)
    發哪里
    aisaiweier:(21:45:10)
    山東
    luchuan1985:(21:45:31)
    三天左右
    aisaiweier:(23:30:06)
    我提交了
    aisaiweier:(23:30:25)
    100元貨到付款包郵嗎
    luchuan1985:(23:31:25)
    只要是貨到付款都不包郵的親
    aisaiweier:(23:32:18)
    我提交了什么時候到貨
    luchuan1985:(23:32:41)
    周一發貨,三天左右
    aisaiweier:(23:33:09)
    最快星期幾
    aisaiweier:(23:33:38)
    請盡快安排發貨,急用
    aisaiweier:(23:33:58)

    aisaiweier:(23:35:01)

    aisaiweier:(23:35:05)
      回復  更多評論
      
    主站蜘蛛池模板: 亚洲成人在线免费观看| 日日摸日日碰夜夜爽亚洲| 国产成人无码免费看片软件| 亚洲VA综合VA国产产VA中| 亚洲av成人一区二区三区观看在线 | 亚洲精品成人网站在线观看| 久久国产乱子伦精品免费午夜| 亚洲一级特黄无码片| 一级毛片大全免费播放| 亚洲日产韩国一二三四区| 女人体1963午夜免费视频| 在线免费观看亚洲| 国产又黄又爽又猛免费app| 亚洲无人区码一二三码区别图片 | 久久不见久久见免费影院| 亚洲老熟女五十路老熟女bbw| 热99re久久精品精品免费| 国产精品亚洲色图| 亚洲熟妇av一区二区三区| 日韩免费无码视频一区二区三区| 亚洲网红精品大秀在线观看 | 国产大片免费网站不卡美女| 亚洲欧洲日韩极速播放| 四虎免费永久在线播放| 国产激情久久久久影院老熟女免费| 亚洲精品中文字幕乱码三区| 久久国产高潮流白浆免费观看| 亚洲已满18点击进入在线观看| 国产做床爱无遮挡免费视频| 久久精品成人免费观看97| 久久久久亚洲AV成人无码网站| 久久笫一福利免费导航| 一级中文字幕免费乱码专区| 亚洲一区影音先锋色资源| 午夜无遮挡羞羞漫画免费| 中国一级特黄高清免费的大片中国一级黄色片 | 亚洲影院在线观看| 国产成人免费a在线资源| 日批视频网址免费观看| 国产亚洲福利在线视频| 精品亚洲综合久久中文字幕|