酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

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

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

画面全体をキャプチャーしたい場合は、「タイトルバー領域とソフトキー領域を含めて画面イメージをキャプチャーする - 酢ろぐ!」を、タイトル領域を除いたアプリ画面をキャプチャーしたい場合は「タイトルバー領域とソフトキー領域を含めずに画面イメージをキャプチャーする - 酢ろぐ!」をご覧ください。

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

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;
    }
}