我有一个非常复杂的Storyboard
,在运行“live”窗口时可以完美地工作,但我有问题手动动画此故事板以获取一帧一帧的动画,我可以将其保存为单个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);
}
}