Самый быстрый способ захвата снимков экрана игры в c #? (более 20 изображений в секунду) - PullRequest
4 голосов
/ 25 августа 2011

Как я могу очень быстро сделать скриншоты на весь экран игры?Что-то вроде 20-30 в секунду? (Я хочу преобразовать их в видео)

[[1]] Я пробовал WMEncoder. В результате WMEncoder мог захватывать экран и области экрана только в видеоформат (wma) с использованием набора предварительно сконфигурированных кодеков.(Лучший результат кодирования 29 кадров в секунду) .WMEncoder не может делать скриншоты.

[[2]] Я пробовал DirectX:

Surface s = device.CreateOffscreenPlainSurface(
Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
Format.A8R8G8B8, Pool.SystemMemory);
device.GetFrontBufferData(0, s);
SurfaceLoader.Save("c:\\Screenshot"+i.ToString()+".bmp", ImageFileFormat.Bmp, s);

Это работает как gdi .. очень медленно ....и он работает только в DirectX 1.0, потому что SurfaceLoader не существует в DirectX 2.0

Другой способ, который я прочитал в некотором посте, использует:

s = device.GetBackBuffer(0, 0, Microsoft.DirectX.Direct3D.BackBufferType.Mono);

, но это делает скриншотытолько в текущее окно.

[[3]] Я пытался использовать Такси (на sourceforge.net) ... но я не знаю, как использовать его в c # и заставить его работать.

Пожалуйста, помогите мне ...

1 Ответ

1 голос
/ 25 августа 2011

Вы действительно хотите подключиться к DirectX, чтобы вы могли делать звонки, как если бы вы были той игрой / приложением. Ниже приведено несколько сайтов, которые делают это (большинство рисуют дополнительные вещи, но я не понимаю, почему вы не можете сохранять буфер в каждом x кадре):

http://www.gamedev.net/topic/359794-c-direct3d-hooking-sample/

Disclamer: я не пробовал этого, поэтому не уверен, какой FPS вы можете получить, однако я думаю, что это самый быстрый метод, поскольку вы делаете это эффективно из игры.

...