1

iOS で一連の画像をアニメーションとして表示する必要があります (Monotouch を使用)。800x600 サイズの画像を使用すると、iPad 3 で表示できる最速の速度は 160ms (6.25 fps) です。これを 15 ~ 30 fps の範囲 (画像あたり 50 ミリ秒未満) にしたいと考えています。ストレージからの画像の読み取りには 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 またはモノゲームを使用する必要がありますか?

4

2 に答える 2

1

わかりました。ここで役立つことがいくつかあります。

  1. UIImage非常に頻繁に発生するため、描画関数にをロードしないでください。LayoutSubviewsコンストラクター、、、またはfilename変数が設定されたときなど、オブジェクトの存続期間中に1回発生するときに、クラス内のメンバー変数に設定します。
  2. CGImageこれと同じ方法でをキャッシュすることもできます。
  3. usingメソッド内のの周りにステートメントを置きCGContextますDraw

これらのことを行うことで、はるかに優れたパフォーマンスを得ることができると思います。

于 2013-03-16T18:03:03.110 に答える
0

OpenGL を試した後、ビュー レイヤーに直接描画することになりました。インスツルメンツは、800x600 の画像に対してこの手法を使用すると 24 FPS と言っています。(iPad 3 上の iOS 6.1)

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

これは十分に機能し、私が期待したことについてです。画像が 2 回目に表示されると、パフォーマンスは最大 40 FPS 以上になります (キャッシュが行われていると仮定します)。

于 2013-03-17T15:09:42.343 に答える