Saturn image

Saturn Software Mills

Free Screen Capture, save any part of screen, free powerful video screen capture tool, save output in BMP, JPG, AVI file formats, download free screensaver and technical articles

 

Home    Free Software     Buy Now      Free Downloads     Articles     Contact Us     Link Exchange

 
 

 

How to Draw a Bitmap on the computer Screen using Microsoft Windows?

 

 

 

The graphics can be placed on top of your screen in two ways – raster graphics or vector graphics. In Vector graphics mode, the mathematical functions or formulas are used to represent a picture. The vector graphics can be drawn on the screen using these mathematical formulas that can be scaled up to any level without any distortion. But in raster graphics mode, the picture is represented by an array of pixel values or numbers that represent the color at the specified location. The raster and vector mode are used or suitable for different purposes. For example, the font library, geometrical objects etc. can easily be represented in vector mode. But a picture of a human, scenic view etc. can better be represented in raster mode. Here we will discuss the methods to create and paste a bitmap (a bitmap is a raster array which stores the pixel or color information of a picture) on the computer screen. Before starting the main discussion, let us see what is a Bitmap?

Bitmaps
A bitmap is an array of pixels, numbers which represents an image. Bitmap structures are used to display images on most type of raster device (like monitor, printer etc.). A bitmap contains information about the size of image i.e. rows and columns, pointer to the pixel data, and the color information in the image. The color is represented by some number of bits in an image. The bits per pixel is very important field to correctly draw the image on some raster device. A 1-bit per pixel represents monochrome images that contain only black and white colors. A 4-bits per pixel image can represent at the most 16 distinct colors. Similarly 8-bits per pixel image can represent 256 distinct colors. An image with 24-bits per pixel represents the full range of colors i.e. 16.8 millions color. Such images are called true-color images. When the bits per pixel are less than or equal to 8, a color palette is used to store the number of colors. Microsoft Windows uses two type of bitmap known as Device Dependent Bitmap (DDB) and Device Independent Bitmap (DIB). The DDBs were in use before the launch of Windows 3.0. Now DIBs are frequently used to represent an image.

Device Dependent Bitmap (DDB)
The DDBs use the hardware palette to represent colors in the image. But the inconsistency in the color palette was faced when the image generated on one device was taken to another device. The colors were different because the hardware palette of source and destination device was different. To avoid such problem, DIBs were invented.

Device Independent Bitmap (DIB)
DIB has solved the problem of interoperability of bitmaps among different raster device. Now the DIB contains the information of the color format of the source device on which the DIB is created. It also contains the complete palette information with it so that same colors can be generated at the destination raster device. DIBs also contain some other useful information that I don’t think is required to be discussed here.


Steps required to create a DIB in Win32 environment
 

 


Step 1. Initialize the BITMAPINFO header.

typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;

typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;

As shown above, initialize the BITMAPINFO structure as per your image parameters. This structure also contains the BITMAPINFOHEADER structure. The fields are well understood and very clear from the parameter name itself. The important point to note here while initializing this structure is that if bit count or bits per pixel is less than 8 then bmiColors[] array must be initialized properly. The bmiColors[] represents the colors of the palette when bit count is less than 8 otherwise it is not required. Secondly the biWidth must me divisible by four. As internally it is represented by WORD and it must finish at WORD boundaries. If your image width is not multiple of four, you must provide padding while creating bitmap.

Step 2. Load the pixel data in a linear array of type unsigned char *lpBits.

Step 3. Paste the bitmap on the computer screen
Use the following function to paste the bitmap on the screen at the desired location.

int StretchDIBits(
HDC hdc, // handle to device context
int XDest, // x-coordinate of upper-left corner of dest. rectangle
int YDest, // y-coordinate of upper-left corner of dest. rectangle
int nDestWidth, // width of destination rectangle
int nDestHeight, // height of destination rectangle
int XSrc, // x-coordinate of upper-left corner of source rectangle
int YSrc, // y-coordinate of upper-left corner of source rectangle
int nSrcWidth, // width of source rectangle
int nSrcHeight, // height of source rectangle
CONST VOID *lpBits, // address of bitmap bits
CONST BITMAPINFO *lpBitsInfo, // address of bitmap data
UINT iUsage, // usage flags
DWORD dwRop // raster operation code
);

 
 

 

 

  

 

 

Home | Free Software | Buy Now | Free Downloads | Articles | Contact Us | Link Exchange

 

All rights reserved with saturnsoftmills.com