Monotouch - 显示一系列图像(太慢)

时间:2013-03-16 05:38:14

标签: ios opengl-es uiview xamarin.ios cgcontext

我需要在iOS中将一系列图像显示为动画(使用Monotouch)。使用800x600大小的图像,我能在iPad 3上显示的最快速度是160毫秒(6.25 fps)。我希望它在15-30fps范围内(每张图像<50ms)。从存储中读取图像需要&lt; 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?

2 个答案:

答案 0 :(得分:1)

好的,有几件事需要帮助:

  1. 您不应在绘图功能中加载UIImage,因为这种情况经常发生。将它设置为类中的成员变量,该变量将在对象的生命周期中发生一次,例如构造函数LayoutSubviews,或者设置filename变量等等。
  2. 你也可以用同样的方式缓存CGImage
  3. using方法的CGContext周围添加Draw声明。
  4. 我认为通过做这些事情你可以获得更好的表现。

答案 1 :(得分:0)

尝试OpenGL后,我最终直接绘制到视图层。乐器使用这种技术为800x600图像说24 FPS。 (iPad 3上的iOS 6.1)

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

这表现得很好,并且与我的预期相符。如果第二次显示图像,性能会上升到40+ FPS(我假设有缓存)。