Here's the correct way of doing it, making sure everything used is cleaned up properly.
public static void DrawBitBlt(Graphics g, Bitmap bmp, ref Rectangle destRec)
{
// Get DC handle and create a compatible one
IntPtr hDC= g.GetHdc();
IntPtr offscreenDC= a.Api.CreateCompatibleDC(hDC);
// Select our bitmap in to DC, recording what was there before
IntPtr hBitmap = bmp.GetHbitmap();
IntPtr oldObject = a.Api.SelectObject(offscreenDC, hBitmap);
// Perform blt
if(bmp.Size.Equals(destRec.Size))
a.Api.BitBlt(hDC, destRec.X, destRec.Y, destRec.Width, destRec.Height, offscreenDC, 0, 0, SrcCopy);
else
a.Api.StretchBlt(hDC, destRec.X, destRec.Y, destRec.Width, destRec.Height, offscreenDC, 0, 0, bmp.Width, bmp.Height, SrcCopy);
// Select our bitmap object back out of the DC
a.Api.SelectObject(offscreenDC, oldObject);
// Delete our bitmap
a.Api.DeleteObject(hBitmap);
// Delete memory DC and release our DC handle
a.Api.DeleteDC(offscreenDC);
g.ReleaseHdc(hDC);
}