如何有效地从流动态加载多个图像?



我需要在一个列表中加载和显示多个图像。想象一下一个"相册"列表。每个包含多个图像-我想显示这些相册的列表与前4张图像的缩略图。

如果我将图像作为普通url,我可以简单地创建字符串属性,设置url并在XAML中将它们绑定到图像的源。框架将处理图片的加载、渲染和缓存。

但是我有从流加载图像的技术要求,通过特定的逻辑获取图像。我现在正在努力如何在我的ViewModel中提供流,以便视图只加载要显示的图像流,并以一种有效的方式做到这一点。我设法通过在ViewModel中创建BitmapImages并使用相应的流调用它们的SetSourceAsync-Method来做到这一点。但是我要么遇到线程问题(BitmapImage似乎只允许由ui线程创建),要么在Android上加载我的流中的图像时应用程序口吃。似乎加载仍然是在ui线程上完成的。

有人有好的方法来处理这个吗?我甚至希望对这些流进行某种形式的缓存。

提前感谢!

亲切的问候,

TopperDEL

***更新日期:2021年1月9日***我设法通过使用Skiasharp来渲染位图来解决这个问题。基本上,我创建了一个UserControl,它包括一个skasharp "SKXamlCanvas"一旦我得到我的流,我创建一个SKBitmap和绘制在画布上。到目前为止,我还没有遇到任何问题。

代码可以在这里看到:Github

是的,但这是真的-如果我尝试在非ui线程的异步方法中创建BitmapImage,它会因"错误的线程"而崩溃。(我这里只有德语错误信息)

是的。默认情况下,我们不能在非线程中创建BitmapImage,对于上述场景,我们建议使用dispatcher回调ui线程。

await Window.Current.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
// create bitmap here 
});

最新更新