我试图创建一个PNG音序器类,允许我通过动画更改ImageBrush的ImageSource属性。
问题是我要加载大约150个PNG文件,当我在屏幕上显示一些动画时,它确实会影响性能。
我已经阅读了一些关于RenderTargetBitmap和WriteableBitmap的内容,但我不确定如何获得大的性能提升,因为我确实需要它。
在某些情况下我会降到6fps,这显然是不可接受的。
在我的Sequencer类中,我只是更新了一个 CurrentFrame DP,它改变了ImageBrush的ImageSource属性。
有关如何提高性能的任何想法吗?
答案 0 :(得分:3)
第1步是提前加载所有图像(最好是在后台线程上)。您应该使用CacheOption = BitmapCacheOption.OnLoad
初始化BitmapImage对象。您可能已经这样做了,或者可能不是问题(默认情况下图像缓存)。
但是,当您更改图像源时,渲染线程也需要做一些工作。如果您没有以源图像大小显示,则可能存在问题,因为默认情况下Image
控件使用高质量的Fant缩放算法。在这种情况下,您可以通过调用RenderOptions.SetBitmapScalingMode(uiImage, BitmapScalingMode.LowQuality);
上的Image
来提高效果。低质量缩放速度快几个数量级。然而,即使在那之后仍然涉及一些工作。如果您希望获得最快的动画效果,可以为每个帧创建一个Image
控件,然后将它们全部重叠在同一个位置并更改哪一个显示在顶部。你仍然可以在渲染线程中加载所有图像,但实际的动画应该非常活泼。