The BitBlt function simply performs a bit-block transfer of the color data corresponding to a rectangle of pixels from a source device context into a destination device context. You can use it in the following way to copy images:
Declare the API:
const int SRCCOPY = 0xcc0020; // we want to copy an in memory image
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern int BitBlt(
IntPtr hdcDest, // handle to destination DC (device context)
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
IntPtr hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
System.Int32 dwRop // raster operation code
);
Perform the Copy operation:
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics; // graphics object
g.FillRectangle(Brushes.Black, ClientRectangle); // make client black
g.DrawRectangle(Pens.White, 20, 20, 60, 60); // draw white rectangles
IntPtr dc = g.GetHdc(); // get device context handle
BitBlt(dc, 70, 0, 60, 60, dc, 0, 0, SRCCOPY); // copy this in memory graphic ( g )
g.ReleaseHdc(dc); // release resources
}