Windows 3.1 Device Drivers (ddag31qh.hlp) (Table of Contents; Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
BITMAPINFOHEADER
                                                     Up Next Previous
────────────────────────────────────────────────────────────────────────────
 
typedef struct tagBITMAPINFOHEADER {    /* bmih */
    DWORD  biSize;
    DWORD  biWidth;
    DWORD  biHeight;
    WORD   biPlanes;
    WORD   biBitCount;
    DWORD  biCompression;
    DWORD  biSizeImage;
    DWORD  biXPelsPerMeter;
    DWORD  biYPelsPerMeter;
    DWORD  biClrUsed;
    DWORD  biClrImportant;
} BITMAPINFOHEADER;
 
The BITMAPINFOHEADER structure contains information about the dimensions and
color format of a Windows 3.x device-independent bitmap.
 
Member           Description
────────────────────────────────────────────────────────────────────────────
 
biSize           Specifies the number of bytes required by the
                 BITMAPINFOHEADER structure.
 
biWidth          Specifies the width of the bitmap in pixels.
 
biHeight         Specifies the height of the bitmap in pixels.
 
biPlanes         Specifies the number of planes for the target device and
                 must be set to 1.
 
biBitCount       Specifies the number of bits per pixel. This value must be
                 1, 4, 8, or 24.
 
biCompression    Specifies the type of compression for a compressed bitmap.
                 It can be one of the following values.
 
                 Value    Meaning
                 ───────────────────────────────────────────────────────────
                 BI_RGB   Specifies that the bitmap is not compressed.
 
                 BI_RLE8  Specifies a run-length encoded (RLE) format for
                          bitmaps with 8 bits per pixel. The compression
                          format is a 2-byte format consisting of a count
                          byte followed by a byte containing a color index.
 
                 BI_RLE4  Specifies a run-length encoded format for bitmaps
                          with 4 bits per pixel. The compression format is a
                          two-byte format consisting of a count byte
                          followed by two word-length color indexes.
 
biSizeImage      Specifies the size in bytes of the image. It is valid to
                 set this member to zero if the bitmap is in the BI_RGB
                 format. The size must then be calculated explicitly.
 
biXPelsPerMeter  Specifies the horizontal resolution in pixels-per-meter of
                 the target device for the bitmap. An application can use
                 this value to select a bitmap from a resource group that
                 best matches the characteristics of the current device.
 
biYPelsPerMeter  Specifies the vertical resolution in pixels-per-meter of
                 the target device for the bitmap.
 
biClrUsed        Specifies the number of color indexes in the color table
                 actually used by the bitmap. If this value is zero, the
                 bitmap uses the maximum number of colors corresponding to
                 the value of the biBitCount member.
 
biClrImportant   Specifies the number of color indexes that are considered
                 important for displaying the bitmap. If this value is zero,
                 then all colors are important.
 
Comments
 
The BITMAPINFO structure combines the BITMAPINFOHEADER structure and a color
table to provide a complete definition of the dimensions and colors of a
Windows 3.x device-independent bitmap.
 
Bitmap-Compression Formats
 
Windows supports formats for compressing bitmaps that define their colors
with 8 bits per pixel and with 4 bits per pixel. Compression reduces the
disk and memory storage required for the bitmap.
 
When the biCompression member is set to BI_RLE8, the bitmap is compressed
using a run-length encoding format for an 8-bit bitmap. This format may be
compressed in either of two modes:
 
♦  Encoded
 
♦  Absolute
 
Both modes can occur anywhere throughout a single bitmap.
 
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. In addition, the first byte of the pair can be set to zero to indicate
an escape that denotes an end of line, end of bitmap, or a delta. The
interpretation of the escape depends on the value of the second byte of the
pair. The following list shows the meaning of the second byte.
 
Value  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 offset of the next pixel from
       the current position.
 
Absolute mode is signaled by the first byte set to zero and the second byte
set to a value between 03H and 0FFH. In absolute mode, the second byte
represents the number of bytes which follow, each of which contains the
color index of a single pixel. When the second byte is set to 2 or less, the
escape has the same meaning as in encoded mode. In absolute mode, each run
must be aligned on a 16-bit boundary.
 
The following example shows the hexadecimal values of an 8-bit compressed
bitmap:
 
03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01
02 78 00 00 09 1E 00 01
 
This bitmap would expand as follows (two-digit values represent a color
index for a single pixel):
 
04 04 04
06 06 06 06 06
45 56 67
78 78
move current position 5 right and 1 down
78 78
end of line
1E 1E 1E 1E 1E 1E 1E 1E 1E
end of RLE bitmap
 
When the biCompression member is set to BI_RLE4, the bitmap is compressed
using a run-length encoding format for a 4-bit bitmap, which also uses
encoded and absolute modes. In encoded mode, the first byte of the pair
contains the number of pixels to be drawn using the color indexes in the
second byte. The second byte contains two color indexes, one in its
high-order nibble (that is, its low-order four bits) and one in its
low-order nibble. The first of the pixels is drawn using the color specified
by the high-order nibble, the second is drawn using the color in the
low-order nibble, the third is drawn with the color in the high-order
nibble, and so on, until all the pixels specified by the first byte have
been drawn.
 
In absolute mode, the first byte contains zero, the second byte contains the
number of color indexes that follow, and subsequent bytes contain color
indexes in their high- and low-order nibbles, one color index for each
pixel. In absolute mode, each run must be aligned on a word boundary. The
end-of-line, end-of-bitmap, and delta escapes also apply to BI_RLE4.
 
The following example shows the hexadecimal values of a 4-bit compressed
bitmap:
 
03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01
04 78 00 00 09 1E 00 01
 
This bitmap would expand as follows (single-digit values represent a color
index for a single pixel):
 
0 4 0
0 6 0 6 0
4 5 5 6 6 7
7 8 7 8
move current position 5 right and 1 down
7 8 7 8
end of line
1 E 1 E 1 E 1 E 1
end of RLE bitmap
 
See Also
 
BITMAPINFO