【问题标题】:Screenshot iOS, MonoGame截图 iOS,MonoGame
【发布时间】:2013-03-27 16:14:13
【问题描述】:

我正在使用 MonoGame 为 iOS 开发游戏。该游戏已经使用 MonoGame 为 Windows 8 (metro) 发布。我们得到了 MonoTouch,我遇到了几个问题,但只剩下一个主要问题。我不能截图。能够截取屏幕截图是游戏中必不可少的组成部分,因为我们有游戏区域共享,所以其他用户将能够看到保存的游戏的样子。据我了解,这在develop3d 分支中未实现,但我从某人那里听说它是在旧版本的develop 分支中实现的。有谁知道解决这个问题的方法?这似乎是一件相当普遍的事情。

任何帮助将不胜感激。

【问题讨论】:

    标签: ios xamarin.ios monogame


    【解决方案1】:

    对于 UIKit 屏幕,您可以使用:

    UIScreen.Capture()
    

    对于 OpenGL 屏幕,您可以使用:

    iPhoneOSGameView.Capture()
    

    【讨论】:

    • 我在 iOSGameView 类中没有看到 Capture() 方法。
    • MonoGame 不使用 iPhoneOSGameView。它有自己的 UIView 子类。
    • 当我用 monogame 调用 UIScreen.Capture() 时,所有图像都是白色的:(
    【解决方案2】:

    您或许可以使用原生 iOS API 来做到这一点:

    UIViewController controller = game.Services.GetService(typeof(UIViewController)) as UIViewController;
    
    UIGraphics.BeginImageContext(controller.View.Frame.Size);
    using (var context = UIGraphics.GetCurrentContext())
    {
        controller.View.Layer.RenderInContext(context);
        using (var image = UIGraphics.GetImageFromCurrentImageContext())
        {
            //Save the image to file here   
        }
    }
    UIGraphics.EndImageContext();
    

    检查错误,这不是我的想法。

    我猜 XNA api 只是没有实现。

    【讨论】:

    • 我确实尝试过这样的事情,我得到的只是白色屏幕截图。但可能是我做得不对。我会试试你的代码。谢谢!
    • 所以,我使用了上面提供的代码,得到了尺寸为 768 x 1024 的白色屏幕截图。我不明白,因为这是在视网膜 iPad 模拟器上运行的。我在想我没有抓住正确的绘图表面,或者我没有访问绘图表面的适当权限,但我不知道,我完全只是猜测。我会尝试在实际设备上运行它,但我非常怀疑我会得到不同的结果。
    • 所以,我找到了一些代码来捕获屏幕并使用 OpenTK/OpenGL 保存到磁盘。问题是,据我了解,在 OpenGL ES 2.0 中,您无法获取帧缓冲区的内容,这就是 MonoGame 中未实现的原因。它是否正确。我找到的代码在这里:opentk.com/doc/graphics/save-opengl-rendering-to-disk
    • 是的,我上面的代码没有考虑视网膜。但你是对的,听起来你可能无法抓取 OpenGL 屏幕截图。我会考虑为 iOS 上的每个级别制作预渲染图像。如果您也支持该平台,您在 Android 上可能也会遇到同样的问题。
    • @weaverx9x9 我需要实现相同的功能。你设法弄清楚了吗?任何帮助都非常感谢。
    【解决方案3】:

    我自己实现了这个,我打算创建一个 PR 但没有时间。我用来创建屏幕截图的代码可以在这里找到:Texture2D.cs我有一段时间没有与远程合并,所以不确定这将如何插入当前源。请注意,您要查看的方法是 SaveAsJpeg 和 SaveAsPng,棘手的部分是正确获取 GetTextureData()。这个问题完全有可能已经被其他人解决了。但这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多