在XNA中如何截屏

5

如何在XNA中截取屏幕截图?是否可以在不使用System.Drawing.Graphics.CopyFromScreen或Win32API的情况下实现?如果不可能,有没有办法将System.Drawing.Bitmap绘制到游戏中?

我希望它可以截取屏幕截图,然后在全屏模式下加载游戏,最后打印屏幕截图。

谢谢。


你想在游戏加载之前对系统进行截屏,还是在游戏运行时对游戏进行截屏? - Rick Mogstad
游戏加载前系统的屏幕截图 - Alon Gubkin
1个回答

5

http://www.gamedev.net/community/forums/topic.asp?topic_id=537265&whichpage=1&#3469331

首先在你的游戏 LoadContent 方法中创建一个 ResolveTexture2D:

renderTargetTexture = new ResolveTexture2D(
        graphics.GraphicsDevice,
        graphics.GraphicsDevice.PresentationParameters.BackBufferWidth,
        graphics.GraphicsDevice.PresentationParameters.BackBufferHeight, 1,
        graphics.GraphicsDevice.PresentationParameters.BackBufferFormat);

在绘制场景后,在Draw方法中解析后备缓冲区:

graphics.GraphicsDevice.ResolveBackBuffer(renderTargetTexture);

最后,在您的Draw方法中暂停游戏时,使用spritebatch绘制您捕获的后台缓冲区:
spriteBatch.Draw(renderTargetTexture, Vector2.Zero, Color.White);

如果您想将图像转换为灰度,您需要编写一个像素着色器,并在LoadContent中加载它与效果文件一起,然后在使用spritebatch绘制纹理之前设置效果。

它没有工作,只显示默认的XNA蓝色矢车菊蓝屏幕。 - Alon Gubkin
问题出在你这边,就我所看到的,那段代码没问题。 - Martin
1
之后我该如何保存这个屏幕截图? - Mathias Lykkegaard Lorenzen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接