1

我需要在 iOS 中将一系列图像显示为动画(使用 Monotouch)。使用 800x600 尺寸的图像,我可以让它们在我的 iPad 3 上显示的最快速度是 160 毫秒(6.25 fps)。我希望它在 15-30fps 范围内(每张图像 < 50ms)。从存储中读取图像需要 < 10 毫秒,因此绘制到屏幕的速度很慢。

    public override void Draw (RectangleF rect)
    {
        base.Draw (rect);
        var cgimg = UIImage.FromFile (filename).CGImage;
        CGContext g = UIGraphics.GetCurrentContext();
        g.DrawImage (new RectangleF (0, 0, cgimg.Width, cgimg.Height), cgimg);
    }

将它们渲染为电影不会提供我想要的交互速度(来回擦洗帧)

这超出了硬件限制吗?(它似乎不应该是)。我需要使用 openGL 还是 Monogame?

4

2 回答 2

1

好的,这里有一些帮助:

  1. 您不应该UIImage在绘图功能中加载 ,因为这种情况经常发生。将其设置为类中的成员变量,该时间将在对象的生命周期内发生一次,例如其构造函数LayoutSubviews,或filename设置变量时等。
  2. CGImage你也可以用同样的方式缓存它。
  3. 在你的方法中加上一个using声明。CGContextDraw

我认为你可以通过做这些事情来获得更好的性能。

于 2013-03-16T18:03:03.110 回答
0

在尝试了 OpenGL 之后,我最终直接绘制到了视图层。Instruments 说使用这种技术处理 800x600 图像的速度为 24 FPS。(iPad 3 上的 iOS 6.1)

this.Layer.Contents =  UIImage.FromFile( {filename}).CGImage;
SetNeedsDisplay ();

这表现得很好,与我预期的差不多。如果第二次显示图像,性能会提高到 40+ FPS(我假设正在进行缓存)。

于 2013-03-17T15:09:42.343 回答