BitBlt (gdi32)
Last changed: -217.105.222.30

.

The BitBlt function performs a bit-block transfer of the color data corresponding to a rectangle of pixels from the specified source device context into a destination device context.

C# Signature:

[DllImport("gdi32.dll")]
static extern bool BitBlt(IntPtr hdc, int nXDest, int nYDest, int nWidth,
   int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);

The last argument uint dwRop from the signature above specifies a raster operation code defined in the header. A value from enum TernaryRasterOperations below can be used as the last argument to fake the defined value as seen in this signature:

[DllImport("gdi32.dll")]
public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth,
    int nHeight, IntPtr hObjSource, int nXSrc, int nYSrc, TernaryRasterOperations dwRop);

User-Defined Types:

public enum TernaryRasterOperations
{
    SRCCOPY     = 0x00CC0020, /* dest = source*/
    SRCPAINT    = 0x00EE0086, /* dest = source OR dest*/
    SRCAND      = 0x008800C6, /* dest = source AND dest*/
    SRCINVERT   = 0x00660046, /* dest = source XOR dest*/
    SRCERASE    = 0x00440328, /* dest = source AND (NOT dest )*/
    NOTSRCCOPY  = 0x00330008, /* dest = (NOT source)*/
    NOTSRCERASE = 0x001100A6, /* dest = (NOT src) AND (NOT dest) */
    MERGECOPY   = 0x00C000CA, /* dest = (source AND pattern)*/
    MERGEPAINT  = 0x00BB0226, /* dest = (NOT source) OR dest*/
    PATCOPY     = 0x00F00021, /* dest = pattern*/
    PATPAINT    = 0x00FB0A09, /* dest = DPSnoo*/
    PATINVERT   = 0x005A0049, /* dest = pattern XOR dest*/
    DSTINVERT   = 0x00550009, /* dest = (NOT dest)*/
    BLACKNESS   = 0x00000042, /* dest = BLACK*/
    WHITENESS   = 0x00FF0062, /* dest = WHITE*/
};

Notes:

This can be used to replace DrawImage() in the managed api since it is much faster!!!

Tips & Tricks:

Please add some!

Sample Code:

//Replaces DrawImage() and is much faster

[DllImport("gdi32.dll")]
public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth,
   int nHeight, IntPtr hObjSource, int nXSrc, int nYSrc,  TernaryRasterOperations dwRop);    

[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
static extern IntPtr CreateCompatibleDC(IntPtr hdc);

[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
static extern bool DeleteDC(IntPtr hdc);

[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);

[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
static extern bool DeleteObject(IntPtr hObject);

public enum TernaryRasterOperations
{
    SRCCOPY     = 0x00CC0020, /* dest = source*/
    SRCPAINT    = 0x00EE0086, /* dest = source OR dest*/
    SRCAND      = 0x008800C6, /* dest = source AND dest*/
    SRCINVERT   = 0x00660046, /* dest = source XOR dest*/
    SRCERASE    = 0x00440328, /* dest = source AND (NOT dest )*/
    NOTSRCCOPY  = 0x00330008, /* dest = (NOT source)*/
    NOTSRCERASE = 0x001100A6, /* dest = (NOT src) AND (NOT dest) */
    MERGECOPY   = 0x00C000CA, /* dest = (source AND pattern)*/
    MERGEPAINT  = 0x00BB0226, /* dest = (NOT source) OR dest*/
    PATCOPY     = 0x00F00021, /* dest = pattern*/
    PATPAINT    = 0x00FB0A09, /* dest = DPSnoo*/
    PATINVERT   = 0x005A0049, /* dest = pattern XOR dest*/
    DSTINVERT   = 0x00550009, /* dest = (NOT dest)*/
    BLACKNESS   = 0x00000042, /* dest = BLACK*/
    WHITENESS   = 0x00FF0062, /* dest = WHITE*/
};

protected override void OnPaint(PaintEventArgs e)
{
            IntPtr pTarget = e.Graphics.GetHdc();
            IntPtr pSource = CreateCompatibleDC(pTarget);
            //bmp is a GDI+ bitmap loaded earlier
            IntPtr pOrig = SelectObject(pSource, bmp.GetHbitmap());
            BitBlt(pTarget, 0,0, bmp.Width, bmp.Height, pSource,0,0,TernaryRasterOperations.SRCCOPY);
            IntPtr pNew = SelectObject(pSource, pOrig);
            DeleteObject(pNew);
            DeleteDC(pSource);
            e.Graphics.ReleaseHdc(pTarget);
}

Alternative Managed API:

System.Drawing.Graphics.DrawImage

Documentation
BitBlt on MSDN