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 }