我有一个非常复杂的Storyboard
东西,在“实时”窗口上运行时效果很好,但是我无法手动为这个故事板设置动画以获取可以保存到单个 PNG 文件中的逐帧动画。所有生成的图像都是第一个动画帧。
我看到了这个,这个,这个,最终这个。还有这个 MSDN 示例,但他们都在谈论动画单个DependencyProperty
. 我需要的是能够逐帧通过复杂的Storyboard
,而不仅仅是一个 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);
}
}