Direct3DHook CapturedBitmap.ToBitmap()导致DirectX应用程序崩溃

时间:2014-10-26 20:02:59

标签: c# directx screenshot

我有一个应用程序,可以在需要时捕获32位DirectX应用程序(BlueStacks)的屏幕截图。它使用Direct3DHook(http://spazzarama.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks/)来获取屏幕截图。它工作正常,但在大约150次调用之后,它崩溃了BlueStacks(而不是正在执行捕获的程序)。

"负载测试" Direct3DHook下载附带的TestScreenshot应用程序上的按钮不会导致BlueStacks崩溃。所以我修改了Direct3DHook附带的TestScreenshot应用程序来执行下面的简单代码,它确实使BlueStacks崩溃了。有没有人知道为什么下面的代码不能和'#34;负载测试"按钮?

private void button1_Click(object sender, EventArgs e)
{
    new Thread(testCapture).Start();
}
public void testCapture()
{
    for (int i = 0; i < 200; i++)
    {
        Bitmap b = _captureProcess.CaptureInterface.GetScreenshot().CapturedBitmap.ToBitmap();
        b.Dispose();
    }
}

1 个答案:

答案 0 :(得分:1)

通过调用Screenshot对象上的Dispose()解决了我的问题。我不确定为什么TestScreenshot程序没有导致BlueStacks崩溃,即使它没有Dispose()截图,但在上面的例子中,这就是所需要的,如下所示:

   private void button1_Click(object sender, EventArgs e)
   {
       new Thread(testCapture).Start();
   }
   public void testCapture()
    {
        for (int i = 0; i < 200; i++)
        {
            Screenshot s = _captureProcess.CaptureInterface.GetScreenshot();
            Bitmap b = s.CapturedBitmap.ToBitmap();
            s.Dispose();
        }
    }