ID Number: Q67883
3.00
WINDOWS
Summary:
Device-independent bitmaps (DIBs) are a very useful tool for
displaying graphic information in a variety of device environments.
With the appropriate device drivers, Windows can display a DIB with
varying results on any video display or on a graphics printer.
This article discusses the differences between two methods that can be
used to access a DIB from a resource.
More Information:
Bitmaps retrieved from resources are very similar to those stored in
.BMP files on disk. The header information is the same for each type of
bitmap. However, depending upon the method used to retrieve the bitmap
from the resource, the bitmap may be a device-independent bitmap (DIB)
or a device-dependent bitmap (DDB).
When the LoadBitmap() function is used to obtain a bitmap from a
resource, the bitmap is converted to a DDB. Typically, the DDB will be
selected into a memory device context (DC) and blt'ed to the screen
for display.
Note: If a 256-color bitmap with a palette is loaded from a resource,
some colors will be lost. To display a bitmap with a palette
correctly, the palette must be selected into the destination DC before
the image is transferred to the DC. LoadBitmap() cannot return the
palette associated with the bitmap; therefore, this information is
lost. Instead, the colors in the bitmap are mapped to colors available
in the default system palette, and a bitmap with the system default
color depth is returned.
For example, if LoadBitmap() loads a 256-color image into an
application running on a VGA display, the 256 colors used in the
bitmap will be mapped to the 16 available colors, and a 4
bits-per-pixel bitmap will be returned. When the display is a
256-color 8514 unit, the same action will map the 256 bitmap colors
into the 20 reserved system colors, and an 8 bits-per-pixel bitmap
will be returned.
If, instead of calling LoadBitmap(), the application calls
FindResource() (with RT_BITMAP type), LoadResource(), and
LockResource(), a pointer to a packed DIB will be the result. A packed
DIB is a BITMAPINFO structure followed by an array of bytes containing
the bitmap bits.
Note that if the resource was originally stored as a DDB, the bitmap
returned will be in the DDB format. In other words, no conversion is
done.
The BITMAPINFO structure, as documented in Chapter 7 of the "Microsoft
Windows Software Development Kit Reference Volume 2," is a
BITMAPINFOHEADER structure and an array of RGBQUADs that define the
colors used in the DIB. The pointer to the packed DIB may be used in
the same manner as a bitmap read from disk.
Note: The BITMAPFILEHEADER structure is NOT present in the packed DIB;
however, it is present in a DIB read from disk.