コントロールだけの画面イメージをキャプチャーする

コントロールだけイメージをキャプチャー可能か調べてみました。

以下にサンプルコードを示す。

C#

    public class Window3
    {
        private const int SRCCOPY = 0xCC0020;
 
        [DllImport("coredll.dll")]
        private static extern int BitBlt(IntPtr hDestDC,
            int x, int y, int nWidth, int nHeight, IntPtr hSrcDC,
            int xSrc, int ySrc, int dwRop);
 
        public static Bitmap CaptureControl(Control ctrl)
        {
            Bitmap bmp = null;
 
            using (Graphics g = ctrl.CreateGraphics())
            {
                bmp = new Bitmap(ctrl.ClientRectangle.Width,
                                 ctrl.ClientRectangle.Height);
                using (Graphics memg = Graphics.FromImage(bmp))
                {
                    IntPtr dc1 = g.GetHdc();
                    IntPtr dc2 = memg.GetHdc();
 
                    BitBlt(dc2, 0, 0, bmp.Width, bmp.Height, dc1, 0, 0, SRCCOPY);
 
                    g.ReleaseHdc(dc1);
                    memg.ReleaseHdc(dc2);
                }
            }
 
            return bmp;
        }
    }