酢ろぐ!

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

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

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

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

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

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

} ||<