我最近做了一个截取游戏截图的应用程序。C#利用SlimDX捕获全屏游戏
首先,我使用GDI来捕获游戏,但因为我必须在win7/vis上禁用aero,并且在Windows XP上有一些问题。
比我决定与DirectX一起,并意识到微软的DX不会为我工作后,我发现了一个SlimDX屏幕捕获(http://spazzarama.wordpress.com/2009/02/这个伟大的例子07/screencapture-with-direct3d /)
SlimDX很棒!它甚至可以让我捕获一个游戏而不必禁用win7/vis上的aero。
唯一的问题是 - 当我将游戏切换到全屏时,我得到“D3DERR_DEVICELOST:设备丢失(-2005530520)”。
任何人都可以提出一种自定义代码的方法,以便捕获全屏应用程序吗?
注:我已经有一种方法可以确定游戏是全屏还是窗口。
我改变这一行:
bitmap = new Bitmap(SlimDX.Direct3D9.Surface.ToStream(surface, SlimDX.Direct3D9.ImageFileFormat.Bmp, new Rectangle(region.Left, region.Top, region.Width, region.Height)));
这样:
bitmap = new Bitmap(SlimDX.Direct3D9.Surface.ToStream(surface, SlimDX.Direct3D9.ImageFileFormat.Bmp));
DirectX不工作,但SlimDX呢?这似乎很奇怪,因为SlimDX是DirectX。当你考虑你发布的片段时,我认为你错了。如果您可以访问后台缓存,对于D3D上下文或屏幕,“Microsoft's DX”中的等效代码也可以使用。 – ssube
不是说它没有工作,我有一些问题。应用程序在执行代码之前冻结。 – user779444