Graphics File Formats(Windows的.BMP .CUR .ICO文件的格式,有范例)
set, the pixel has the color of the second entry in the table.
4 bitmap has a maximum of 16 colors. each pixel in the bitmap is represented by a 4-bit index into the color table. for example, if the first byte in the bitmap is 0x1f, the byte represents two pixels. the first pixel contains the color in the second table entry, and the second pixel contains the color in the sixteenth table entry.
8 bitmap has a maximum of 256 colors. each pixel in the bitmap is represented by a 1-byte index into the color table. for example, if the first byte in the bitmap is 0x1f, the first pixel has the color of the thirty-second table entry.
24 bitmap has a maximum of 2^24 colors. the bmicolors (or bmcicolors) member is null, and each 3-byte sequence in the bitmap array represents the relative intensities of red, green, and blue, respectively, for a pixel.
the biclrused member of the bitmapinfoheader structure specifies the number of color indexes in the color table actually used by the bitmap. if the biclrused member is set to zero, the bitmap uses the maximum number of colors corresponding to the value of the bibitcount member. an alternative form of bitmap file uses the bitmapcoreinfo, bitmapcoreheader, and rgbtriple structures.
bitmap compression
windows versions 3.0 and later support run-length encoded (rle) formats for compressing bitmaps that use 4 bits per pixel and 8 bits per pixel. compression reduces the disk and memory storage required for a bitmap.
compression of 8-bits-per-pixel bitmaps
when the bicompression member of the bitmapinfoheader structure is set to bi_rle8, the dib is compressed using a run-length encoded format for a 256-color bitmap. this format uses two modes: encoded mode and absolute mode. both modes can occur anywhere throughout a single bitmap.
encoded mode
a unit of information in encoded mode consists of two bytes. the first byte specifies the number of consecutive pixels to be drawn using the color index contained in the second byte. the first byte of the pair can be set to zero to indicate an escape that denotes the end of a line, the end of the bitmap, or a delta. the interpretation of the escape depends on the value of the second byte of the pair, which must be in the range 0x00 through 0x02. following are the meanings of the escape values that can be used in the second byte:
second byte meaning
0 end of line. 1 end of bitmap. 2 delta. the two bytes following the escape contain unsigned values indicating the horizontal and vertical offsets of the next pixel from the current position.
absolute mode
absolute mode is signaled by the first byte in the pair being set to zero and the second byte to a value between 0x03 and 0xff. the second byte represents the number of bytes that follow, each of which contains the color index of a single pixel. each run must be aligned on a word boundary. following is an example of an 8-bit rle bitmap (the two-digit hexadecimal values in the second column represent a color index for a single pixel):
compressed data expanded data |