C#でデスクトップ画面をキャプチャする

chakemiです。

本日は、C#でデスクトップの画面をキャプチャしてみようと思います。

まずは、簡単に、.NET FrameworkのGraphics.CopyFromScreenメソッドを使ってみます。

開発環境

  • WindowsXP SP3
  • VisualC#2010Express

はじめにScreenクラスを使用して、画面のサイズを取得してBitmapオブジェクトを用意します。

1
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);

Bitmapクラスからは、Screenからコピーするメソッドが存在しないため、代わりにGraphicsオブジェクトをbmpを元に生成します。

1
Graphics graph = Graphics.FromImage(bmp);

GraphicsクラスのCopyFromScreenメソッドを使用して、ScreenをBitmapオブジェクトに色データのビットブロック転送を行ないます。

1
graph.CopyFromScreen(new Point(0, 0), new Point(0, 0), bmp.Size);

第一引数に転送先の四角形の左上隅の点、第二引数に転送元の四角形の左上隅の点、第三引数に転送される領域のサイズを指定します。

転送が完了したら、不要なGraphicsオブジェクトを破棄します。

1
graph.Dispose();

あとは、BitmapオブジェクトをPictureBoxに描画したり、bmpファイルに保存すれば出来上がり♪

1
2
3
4
5
6
7
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graph = Graphics.FromImage(bmp);
graph.CopyFromScreen(new Point(0, 0), new Point(0, 0), bmp.Size);
graph.Dispose();

pictureBox1.Image = bmp;
bmp.Save(@"C:\test.bmp");