如何提高XAML WinRT图像更改速度?
-
12-12-2019 - |
题
假设我有数量可变的静态图像资源,我想快速显示它们。
所以我有一个 INotifyPropertyChanged 类
for (blah)
bitMaps.Add(new BitmapImage(new Uri(blah + i + ".png")));
在列表和属性中获取图像
public ImageSource Image
{
get
{
return bitMaps[Index];
}
}
随着
public int Index
{
set
{
_Index = value;
OnPropertyChanged("Image");
}
}
这样我就可以通过更改 Index.html 来更改显示的图像。
然后我有一个绑定的图像标签 <Image Source="{Binding Image}" Stretch="None" />
来显示它。
但是,尽管最初似乎加载了位图图像,但更改索引时的转换仍然在第一次闪烁,这让我认为 BitmapImage 是延迟加载的。有没有更好/更高效的方法来做到这一点?或者如何正确预加载图像?
更新:我最终只是创建了一个用户控件,其中创建了所有图像标签并且不可见......
解决方案
修改图像源时,您总会遇到闪烁的情况。如果您想预加载图像,则可以将它们放入视觉树中。我的第一个建议是使用像这样的 FlipView:
<FlipView ItemSource="{Binding Bitmaps}" SelectedIndex="{Binding Index}">
<FlipView.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}" />
</DataTemplate>
</FlipView.ItemTemplate>
</FlipView>
当您更改索引时,FlipView 将显示已预加载的下一张/上一张图像。
如果您有数百个图像,则编写自己的自定义控件来循环显示图像。
但无论哪种方式,如果更改图像的来源,丢弃旧位图和渲染新位图之间都会存在间隙。
不隶属于 StackOverflow