我试图在可缩放的ScrollViewer中加载矢量图像,在我的笔记本电脑上工作得很好,但在缩放/解除缩放时平板电脑上的速度非常慢。在图像渲染过程中,UI被冻结。
我的图像已使用Inkscape从svg转换为xaml文件。 (~2,37 MB)
C#
public MainPage()
{
this.InitializeComponent();
this.Loaded += MainPage_Loaded;
}
async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
string fileContent;
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(@"ms-appx:///Images/plan.xaml"));
using (StreamReader sRead = new StreamReader(await file.OpenStreamForReadAsync()))
fileContent = await sRead.ReadToEndAsync();
var xamlRead = XamlReader.Load(fileContent) as Canvas;
ImgMainGrid.Height = xamlRead.Height;
ImgMainGrid.Width = xamlRead.Width;
ImgMainGrid.Children.Add(xamlRead);
}
XAML
<ScrollViewer Grid.Row="1" x:Name="scrl" ZoomMode="Enabled" HorizontalScrollMode="Enabled" VerticalScrollMode="Enabled" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" MinZoomFactor="1">
<Grid x:Name="ImgMainGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</ScrollViewer>
如何在背景中渲染画布? (不阻止UI)。 如果不可能,我如何处理此渲染以在渲染时添加ProgressBar?
答案 0 :(得分:0)
这不是这个问题的真正答案,而是一个临时解决方案。
首先使用inkscape打开svg文件并将其放大到一个大分辨率(我尝试使用3500 * 4000),并导出到xaml。 (此方法将通过保持较小的文件大小来放大图像)。
在C#代码中添加xamlRead.CacheMode = new BitmapCache();
,这将使用导出的大小将图像从矢量渲染到位图。
最后,它就像处理文件较小的非常大的PNG / JPEG图像一样。使用矢量图像的所有其他兴趣都丢失了。但结果是公平的。