3

「ライブ」ウィンドウで実行すると完全に機能する非常に複雑なStoryboardものがありますが、このストーリーボードを手動でアニメーション化して、個々の PNG ファイルに保存できるフレームごとのアニメーションを取得するのに問題があります。生成された画像はすべてアニメーションの最初のフレームです。

これこれこれ、そして最終的にこれを見てきました。このMSDNサンプルもありますが、それらはすべて単一のアニメーション化について話していDependencyPropertyます. Storyboard私が必要としているのは、 1 つの DP だけでなく、複雑な を持つフレームごとにステップスルーする機能です。

私は運がなければどこでも検索しました。また、私の実験はすべて失敗しました。どんな助けでも大歓迎です。これは、機能しないコードの一部です。

            storyboard.Begin(grid, true);
            //storyboard.Pause();
            //var clock = storyboard.CreateClock();
            //clock.Controller.Pause();
            var secs = Enumerable.Range(0, totalFrames).Select(t => (((double)t) / FPS));

            grid.Measure(new Size(480, 340));
            grid.Arrange(new Rect(grid.DesiredSize));

            foreach (var sec in secs)
            {
                //clock.Controller.SeekAlignedToLastTick(TimeSpan.FromSeconds(sec), TimeSeekOrigin.BeginTime);
                storyboard.SeekAlignedToLastTick(TimeSpan.FromSeconds(sec), TimeSeekOrigin.BeginTime);
                grid.InvalidateVisual();
                grid.UpdateLayout();

                var filename = Path.Combine(tempFolder, string.Format("image{0}.png", sec));
                var rtb = new RenderTargetBitmap((int) grid.ActualWidth, (int) grid.ActualHeight, 96, 96, PixelFormats.Pbgra32);
                rtb.Render(grid);

                var png = new PngBitmapEncoder();
                png.Frames.Add(BitmapFrame.Create(rtb));

                using (var stream = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
                {
                    png.Save(stream);
                }
            } 
4

2 に答える 2

2

@wpfwannabe: 洞察に感謝します。

私はあなたのコードを使用しましたが、以下に示すようにわずかな変更を加えましたが、うまくいきました。

rootStoryBoard.SeekAlignedToLastTick(Program.AnimPlots.canvs, TargetTmspn, System.Windows.Media.Animation.TimeSeekOrigin.BeginTime);

上記のコード行では:Program.AnimPlots.canvsはスナップショットの領域です。あなたの場合、それはgridtypeTargetTmspnのオブジェクトですTimeSpan

これが誰かを助けることを願っています:)

于 2015-07-07T05:30:44.910 に答える
0

これがあなたが役に立つと思うかもしれないもう一つのアプローチです。XAMLストーリーボードをフレームごとにアニメーション化するためのすべてのオプションを使い果たした場合は、代わりにストーリーボードをコードで作成することもできます。例を次に示します。RenderTransformを使用したコードビハインドループでのアニメーション

その利点は、ストーリーボードをプログラムで完全に制御して、個々のキーフレームを1つずつステップ実行し、各フレームの後に画像を保存できることです。

しばらく前に、jQueryで概念的に似たようなことをしました。基本的に、座標データポイントを保存する線画署名アプリを作成しました。次に、データポイントをアルゴリズムにリロードして、アニメーションを再現できます。http://kodekreachor.com/prototypes/

これは非常に異なるテクノロジーであることは知っていますが、コードからシーケンシャルアニメーションを完全に制御できるという考えがあります。これは、持ち帰りになり、インスピレーションとして役立つことを願っています。

于 2012-04-14T16:39:57.490 に答える