如何使用C#&;制作屏幕截图;新华社?
如何使用C#&;制作屏幕截图;新华社?,c#,xna,xna-4.0,C#,Xna,Xna 4.0,如何在全屏模式下运行游戏时,使用C#和XNA制作屏幕截图并将其保存到硬盘?这将向您展示如何拍摄屏幕截图。在本例中,它在每次渲染时都保存一幅图像,因此您只需将其移动到一个函数,以便在保存屏幕截图时调用该函数。该API是可用的 如果您在HiDef配置文件(Xbox 360和更新的Windows计算机)上运行,则可以使用GraphicsDevice.GetBackBufferData 为了方便保存数据,您可以使用将其输出放入Texture2D.SetData中,然后使用SaveAsPng或SaveAs
如何在全屏模式下运行游戏时,使用C#和XNA制作屏幕截图并将其保存到硬盘?这将向您展示如何拍摄屏幕截图。在本例中,它在每次渲染时都保存一幅图像,因此您只需将其移动到一个函数,以便在保存屏幕截图时调用该函数。该API是可用的 如果您在
HiDef
配置文件(Xbox 360和更新的Windows计算机)上运行,则可以使用GraphicsDevice.GetBackBufferData
为了方便保存数据,您可以使用将其输出放入Texture2D.SetData
中,然后使用SaveAsPng
或SaveAsJpeg
(这比需要的速度稍慢,因为它也会将数据发送回GPU,但这非常简单)
如果使用的是
Reach
配置文件,则必须将场景渲染为RenderTarget2D
。我的代码应该给您一个很好的起点。这里来看看这段代码
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();
但是,我想在运行时复制它,我没有像“ResolveTexture2D”这样的东西,并保存它,而不是打印。这个问题不是(那个问题的)副本。XNA 4.0中的API发生了变化,但答案不适用。如果我使用GraphicsDeviceManager,如何实现这一点?(我是初学者,很抱歉问了这么愚蠢的问题:)我不太明白你的问题。您正在寻找
图形设备管理员。图形设备
?你应该为这些事情负责。当然,如果您在从Game
或GameComponent
派生的类中,您可以直接访问它们。