Как сделать скриншот с помощью C # и XNA? - PullRequest
5 голосов
/ 03 апреля 2011


Как сделать скриншот и сохранить его на HDD, используя C # и XNA, при запуске игры в полноэкранном режиме?

Ответы [ 3 ]

7 голосов
/ 03 апреля 2011

API был изменен в XNA 4.0 .

Если вы работаете в профиле HiDef (Xbox 360 и более новые машины Windows), вы можете использовать GraphicsDevice.GetBackBufferData.

Чтобы упростить сохранение этих данных, вы можете использовать вывод этих данных в Texture2D.SetData, а затем использовать SaveAsPng или SaveAsJpeg (это немного медленнее, чем нужно, потому что он также отправляетданные возвращаются в графический процессор - но это так просто easy ).

Если вы используете профиль Reach, то вы должны отобразить вашу сцену в RenderTarget2D.Мой ответ здесь должен дать вам хорошую отправную точку.

4 голосов
/ 09 ноября 2011

Вот взгляните на этот код.

count += 1;
string counter = count.ToString();

int w = GraphicsDevice.PresentationParameters.BackBufferWidth;
int h = GraphicsDevice.PresentationParameters.BackBufferHeight;

//force a frame to be drawn (otherwise back buffer is empty) 
Draw(new GameTime());

//pull the picture from the buffer 
int[] backBuffer = new int[w * h];
GraphicsDevice.GetBackBufferData(backBuffer);

//copy into a texture 
Texture2D texture = new Texture2D(GraphicsDevice, w, h, false, GraphicsDevice.PresentationParameters.BackBufferFormat);
texture.SetData(backBuffer);

//save to disk 
Stream stream = File.OpenWrite(counter + ".jpg");

texture.SaveAsJpeg(stream, w, h);
stream.Dispose();

texture.Dispose();
0 голосов
/ 03 апреля 2011

Этот ответ показывает, как сделать снимок экрана.В этом примере он сохраняет изображение при каждом рендеринге, поэтому вам просто нужно переместить его в функцию, которую вы можете вызвать, когда хотите сохранить скриншот.

...