連続して画面をキャプチャする方法
- 題名: 連続して画面をキャプチャする方法
- 著者: katora
- 日時: 2010/12/22 21:52:58
- ID: 27880
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 連続して画面をキャプチャする方法
- 著者: 魔界の仮面弁士
- 日時: 2010/12/22 23:31:27
- ID: 27881
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 連続して画面をキャプチャする方法
- 著者: Azulean
- 日時: 2010/12/23 0:28:03
- ID: 27884
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: 連続して画面をキャプチャする方法
- 著者: katora
- 日時: 2010/12/23 0:59:40
- ID: 27885
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: 連続して画面をキャプチャする方法
- 著者: Azulean
- 日時: 2010/12/23 1:29:13
- ID: 27886
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: 連続して画面をキャプチャする方法
- 著者: 管理人
- URL: http://dobon.net/
- 日時: 2010/12/23 2:47:39
- ID: 27887
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: 連続して画面をキャプチャする方法
- 著者: katora
- 日時: 2010/12/23 10:07:47
- ID: 27888
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
2010/12/23(Thu) 02:42:12 編集(管理者)
【解決したい問題】
連続して画面をキャプチャするアプリケーションを作成したく
奮闘中です。
【解決するために何をしたか】
DOBON.NET様の「画面をキャプチャする」(以下URL)
http://dobon.net/vb/dotnet/graphics/screencapture.html
のソースを使用し、以下の関数を作成しました。
--------------------------------------------------------
public static Bitmap Capture()
{
//Bitmapの作成
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height); //←ArgumentException発生
//Graphicsの作成
Graphics g = Graphics.FromImage(bmp);
//画面全体をコピーする
g.CopyFromScreen(new Point(0, 0), new Point(0, 0), bmp.Size);
//解放
g.Dispose();
return bmp;
}
--------------------------------------------------------
と
--------------------------------------------------------
public static Bitmap Capture2()
{
//プライマリモニタのデバイスコンテキストを取得
IntPtr disDC = GetDC(IntPtr.Zero);
//Bitmapの作成
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height);
//Graphicsの作成
Graphics g = Graphics.FromImage(bmp);
//Graphicsのデバイスコンテキストを取得
IntPtr hDC = g.GetHdc(); //←ArgumentException発生
//Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height,
disDC, 0, 0, SRCCOPY);
//解放
g.ReleaseHdc(hDC);
g.Dispose();
ReleaseDC(IntPtr.Zero, disDC);
return bmp;
}
--------------------------------------------------------
上記関数を以下のようなforループで呼び出したところ、
for( int i = 0 ; i < 1000 ; i++ )
{
Capture();
}
87〜9回目で、上記関数のコメントをつけた部分でArgumentExceptionが発生してしまいました。
【追加事項】
ArgumentExceptionの詳細は以下のとおりです。
複数回呼び出す場合には何か特別な処理をしないといけないものでしょうか?
System.ArgumentException はハンドルされませんでした。
Message="使用されたパラメータが有効ではありません。"
Source="System.Drawing"
StackTrace:
場所 System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
場所 System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
場所 Mng.RF.Drawing.ScreenShot.Capture2() 場所 Z:\xxxxxxx.xxxxxxxxx\VisualStudio projects\Mng.RF.Drawing\Mng.RF.Drawing\ScreenShot.cs:行 78
場所 Mng.RF.Drawing.Debug.MainForm.button3_Click(Object sender, EventArgs e) 場所 Z:\xxxxxxx.xxxxxxxxx\VisualStudio projects\Mng.RF.Drawing\Mng.RF.Drawing.Debug\MainForm.cs:行 64
場所 System.Windows.Forms.Control.OnClick(EventArgs e)
場所 System.Windows.Forms.Button.OnClick(EventArgs e)
場所 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
場所 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ButtonBase.WndProc(Message& m)
場所 System.Windows.Forms.Button.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.Run(Form mainForm)
場所 Mng.RF.Drawing.Debug.Program.Main() 場所 Z:\xxxxxxx.xxxxxxxxx\VisualStudio projects\Mng.RF.Drawing\Mng.RF.Drawing.Debug\Program.cs:行 18
場所 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Threading.ThreadHelper.ThreadStart()
InnerException: