【问题标题】:How to make a screenshot in MonoGame for Windows?如何在 MonoGame for Windows 中制作屏幕截图?
【发布时间】:2013-04-23 05:04:03
【问题描述】:

所以我一直在尝试从当前游戏窗口(本质上是屏幕截图)创建图像文件,但到目前为止我尝试过的只是不起作用。 MonoGame 开发人员尚未实现 RenderTarget2D.SaveAsPng()RenderTarget2D.SaveAsJpeg() 方法以用于 Windows...

所以我想知道,还有其他选择吗?

下面是一个示例代码,运行时会引发 NotImplemented 错误,任何好奇的人都可以:

Stream stream = new FileStream("screenshot.jpg", FileMode.Create, FileAccess.Write, FileShare.None);
screenshot.SaveAsJpeg(stream, 320, 180);
stream.Close();

变量screenshot 是一个RenderTarget2D 对象,游戏画面在其中绘制。

感谢阅读,希望能得到一些帮助。

【问题讨论】:

    标签: c# monogame


    【解决方案1】:

    SaveAsJpeg 定义为:

    public void SaveAsJpeg(Stream stream, int width, int height)
    {
    #if WINDOWS_STOREAPP
        SaveAsImage(BitmapEncoder.JpegEncoderId, stream, width, height);
    #elif WINDOWS_PHONE
    
        var pixelData = new byte[Width * Height * GraphicsExtensions.Size(Format)];
        GetData(pixelData);
    
        var waitEvent = new ManualResetEventSlim(false);
        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            var bitmap = new WriteableBitmap(width, height);
            System.Buffer.BlockCopy(pixelData, 0, bitmap.Pixels, 0, pixelData.Length);
            bitmap.SaveJpeg(stream, width, height, 0, 100);
            waitEvent.Set();
        });
    
        waitEvent.Wait();
    #elif MONOMAC
        SaveAsImage(stream, width, height, ImageFormat.Jpeg);
    #else
        throw new NotImplementedException();
    #endif
    }
    

    你可以添加

    #define WINDOWS_STOREAPP
    

    在你的主课中。

    【讨论】:

    • 我试过了,它确实识别出正在设置的常量,但它仍然会引发 NotImplemented 错误。我尝试了所有可能的常量,但似乎都不起作用。
    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2021-03-20
    相关资源
    最近更新 更多