BMP文件

BMP文件剖析


参考资料

文件分为四大块

Structure locations
Header 00h - 0Dh
InfoHeader 0Eh - 35h
ColorTable 36h - variable
Pixel Data variable

具体分解

Name Size Offset Description
Header 14 bytes Windows Structure: BITMAPFILEHEADER
Signature 2 bytes 0000h "BM"
FileSize 4 bytes 0002h File size in bytes
reserved 4 bytes 0006h unused (=0)
DataOffset 4 bytes 000Ah Offset from beginning of file to the beginning of the bitmap data
InfoHeader 40 bytes Windows Structure: BITMAPINFOHEADER
Size 4 bytes 000Eh Size of InfoHeader =40
Width 4 bytes 0012h Horizontal width of bitmap in pixels
Height 4 bytes 0016h Vertical height of bitmap in pixels
Planes 2 bytes 001Ah Number of Planes (=1)
Bits Per Pixel 2 bytes 001Ch Bits per Pixel used to store palette entry information. This also identifies in an indirect way the number of possible colors. Possible values are:
1 = monochrome palette. NumColors = 1
4 = 4bit palletized. NumColors = 16
8 = 8bit palletized. NumColors = 256
16 = 16bit RGB. NumColors = 65536
24 = 24bit RGB. NumColors = 16M
Compression 4 bytes 001Eh Type of Compression
0 = BI_RGB no compression
1 = BI_RLE8 8bit RLE encoding
2 = BI_RLE4 4bit RLE encoding
ImageSize 4 bytes 0022h (compressed) Size of Image
It is valid to set this =0 if Compression = 0
XpixelsPerM 4 bytes 0026h horizontal resolution: Pixels/meter
YpixelsPerM 4 bytes 002Ah vertical resolution: Pixels/meter
Colors Used 4 bytes 002Eh Number of actually used colors. For a 8-bit / pixel bitmap this will be 100h or 256.
Important Colors 4 bytes 0032h Number of important colors
0 = all
ColorTable 4 * NumColors bytes 0036h present only if Info.BitsPerPixel less than 8 colors should be ordered by importance
Red 1 byte Red intensity
Green 1 byte Green intensity
Blue 1 byte Blue intensity
reserved 1 byte unused (=0)
repeated NumColors times
Pixel Data InfoHeader.ImageSize bytes The image data

单个像素信息

Value Description
1 The bitmap is monochrome, and the palette contains two entries. Each bit in the bitmap array represents a pixel. If the bit is clear, the pixel is displayed with the color of the first entry in the palette; if the bit is set, the pixel has the color of the second entry in the table.
4 The bitmap has a maximum of 16 colors, and the palette contains up to 16 entries. Each pixel in the bitmap is represented by a 4-bit index into the palette. For example, if the first byte in the bitmap is 1Fh, the byte represents two pixels. The first pixel contains the color in the second palette entry, and the second pixel contains the color in the sixteenth palette entry.
8 The bitmap has a maximum of 256 colors, and the palette contains up to 256 entries. In this case, each byte in the array represents a single pixel.
16 The bitmap has a maximum of 2^16 colors. If the Compression field of the bitmap file is set to BI_RGB, the Palette field does not contain any entries. Each word in the bitmap array represents a single pixel. The relative intensities of red, green, and blue are represented with 5 bits for each color component. The value for blue is in the least significant 5 bits, followed by 5 bits each for green and red, respectively. The most significant bit is not used. If the Compression field of the bitmap file is set to BI_BITFIELDS, the Palette field contains three 4 byte color masks that specify the red, green, and blue components, respectively, of each pixel. Each 2 bytes in the bitmap array represents a single pixel.
24 The bitmap has a maximum of 2^24 colors, and the Palette field does not contain any entries. Each 3-byte triplet in the bitmap array represents the relative intensities of blue, green, and red, respectively, for a pixel.
posted @ 2021-10-18 23:03  CharlesHo  阅读(107)  评论(0)    收藏  举报