「ライブ」ウィンドウで実行すると完全に機能する非常に複雑な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);
}
}