TOP English

透明度付 BMP のフォーマット(1)

Transparent BMP file format(1)

Skymaker の出力している透明度付 BitMap (透過BMP) のバイナリフォーマットは以下の通りです。
なお、DWORD (4 byte) は、下位バイトが先に記録される Intel フォーマットです。

Skymaker outputs following bit map (BMP) with transparency, when 'WT' command assigned.
DWORD data are recorded in LSB-first (Intel integer) format.

  0000  'B'
  0001  'M'
  0002  DWORD  File Length    // = (width)*(height)*4 + 134 
  0006  00 00                 // reserved 1 
  0008  00 00                 // reserved 2 
  000A  86 00 00 00           // bit map start address (=134) 
  000E  6C 00 00 00           // Windows 95 type bit map (BITMAPV4) 
  0012  DWORD  Width (X)      // = (width) 
  0016  DWORD  Height (Y)     // = (height) 
  001A  01 00                 // plane (=1) 
  001C  20 00                 // bits/pixel (=32) 
  001E  03 00 00 00           // compression type (=3: BI_BITFIELDS) 
  0022  00 00 00 00           // N/A (compressed bitmap data size) (=0) 
  0026  FF 00 00 00           // horizontal resolution (pixel/meter)) (=0xFF) 
  002A  FF 00 00 00           // vertical resolution   (pixel/meter)) (=0xFF) 
  002E  00 00 00 00           // N/A (number of colors) (=0) 
  0032  00 00 00 00           // N/A (number of important colors) (=0) 
  0036  FF 00 00 00           // bit mask (red) 
  003A  00 FF 00 00           // bit mask (green) 
  003E  00 00 FF 00           // bit mask (blue) 
  0042  00 00 00 FF           // bit mask (alpha) 
  0046  'B'                   // = LCS_sRGB 
  0047  'G' 
  0048  'R' 
  0049  's' 
  004A  00 00 00 00           // CIE RGB-XYZ table 3*3*4 bytes 
  004E  00 00 00 00 
  0052  00 00 00 00 
  0056  00 00 00 00 
  005A  00 00 00 00 
  005E  00 00 00 00 
  0062  00 00 00 00 
  0066  00 00 00 00 
  006A  00 00 00 00 
  006E  01 00 00 00           // gamma (red) 
  0072  01 00 00 00           // gamma (green) 
  0076  01 00 00 00           // gamma (blue) 
  007A  FF 00 00 00           // (red) 
  007E  00 FF 00 00           // (green) 
  0082  00 00 FF 00           // (blue) 
  // (bit map follows ...) 
  0086  Red   (00-FF) at (x,y)=(0,height-1) 
  0087  Green (00-FF) at (x,y)=(0,height-1) 
  0088  Blue  (00-FF) at (x,y)=(0,height-1) 
  0089  Alpha (00-FF) at (x,y)=(0,height-1) 
   :      : 
   :      : 
  (repeated (width)*(height) times ...)

  (end of file)
  

上記は、Win32 SDK の、BITMAPV4 (Windows 95 version) の定義に従っています。
(The above shows the format of the BMP files actually output by PaintBrush on Windows 98,
and is the dump list of a BMP file in BITMAPV4 (Windows 95 version) format defined in Win32 SDK.)

ビットマップは、左下を先頭に、左から右、下から上の順で、格納されます。
Windows 3.1 形式では B, G, R 順が標準ですが、本フォーマットでは R, G, B, A の順です。
必ず 4 byte の倍数となるため、1水平ラインごとの終端処理は特に不要となっています。
(Each line is recorded in left-to-right order, and the whole bitmap is recorded in bottom-to-top order.
In this format, each pixel is recorded in R-G-B-A byte order, in contrast to the well-known Windows 3.1 BMP format (in which each pixel was recorded in B-G-R byte order). In this format, each line naturally becomes 4-byte aligned, then no padding is necessary.)

BITMAPV4、BITMAPV5 形式 BMP は、一時期 Windows Update された Windows 98 ペイントブラシのバグによって生成されていました。
また、Windows 98 付属の Imaging によって、透明度付 BITMAPV5 形式 BMP が生成されていました。
また、 「BitMap の極み」(希葉 竜胆 氏) で出力される透明度付 BMP ファイルも上記と同じフォーマットでした。
(※2021.11.3 リンク先サーバ終了)

BITMAPV4 形式 BMP ファイルについては、Win32 SDK では運用方法が不明瞭なデータ部分があり (BITMAPV4HEADER のヘッダ構造については完全な定義有り)、 本 Skymaker の透明度付 BMP は、これらの BITMAPV4・BITMAPV5 形式の実際の BMP ファイルを逆解析したフォーマットに従って生成しています。


補足:
  1. ビットマップには、OS/2 形式、Windows 3.0 形式、Windows 95 形式、Windows 98 形式があります。
  2. 一般に、ペイントソフトで BMP 形式として出力されるファイルは、Windows 3.0 形式です。
  3. Microsoft 社承認ではありませんが、Photoshop (Adobe社) (7.0, CS3) が独自ヘッダ形式での 32-bit BMP を出力できます。
  4. Reserve ビットに透明度(アルファ値)を埋込む形で、GIMP が Windows 3.0 形式透明度付 32-bit BMP を出力できます。
  5. 透明度 (αチャネル) については、BITMAPV4 以降で定義されています。
  6. Skymaker では、RLE4・RLE8 圧縮と、16 bit/pixel 特殊フォーマット、topdown BMP を含む、上記全形式の読込みに対応しています。
    MacBinary の付加された BMP ファイルも読込み可能です。(自動スキップ)
    透明/不透明 (Alpha) を反転して読込むことも可能です。(先に「 TE 0,-1 」のように指定)
  7. Skymaker の出力するビットマップは、
    透明度なしの場合 Windows 3.0 形式 (24 bit/pixel(bpp) 標準 BGR 順)、
    透明度つきの場合 Windows 95 形式 (32 bit/pixel(bpp) RGBA 順) (WT コマンド指定時)
    です。V2.30 以降 (2002 年リリース) 同じ形式で生成しています。
    (BMPFコマンドで変更は可能)
  8. 上記バイナリフォーマットでは、gamma 値を整数値の1にセットしています。この値は Win32 SDK 定義と異なっていますが、当時 Windows 98 上で、この値を SDK 定義通りにセットすると、ビットマップの極みと Irfan View 上の両方で、画像表示が真っ黒となったことから、OS 側に不具合があると判断し、実際の動作で正常表示されることを優先しました。
  9. Windows XP 以降のペイント (ペイントブラシ) およびビュアーで、RGB プレーンのみ正常表示されるようになりました。
    Windows 95, 98, Me のペイント (ペイントブラシ) での表示は真っ白となります。
    IrfanView (V2.13), Imaging (Windows Me 標準アクセサリ) では、RGB プレーンのみ正常表示されています。
  10. Susie Plug-in で BMP ファイル対応のものが指定された場合は、Susie Plug-in の処理を優先します。
    (先に判定しています)
  11. Susie Plug-in 経由時も、BITMAPV4 / BITMAPV5 形式で受渡しされれば、透明度付画像として読込み可能です。

もし、不具合等みつかりましたら、サポートへご連絡ください。


関連ページ (透明度付BMP Cソース例)
Related page (with a C source code example)



Last update 2021.11.3

Copyright(c) Finekit 2004, 2021