仿照微软照片,自己做一个相册。做法是递归加载加载本地图片库
大概就是:
private async Task<ImageGroup> ReadFolder(StorageFolder TargetFolder, ObservableCollection<ImageGroup> groups) {
var group = await ReadImageInOneFolder(TargetFolder);
groups.Add(group);
//向下层寻找
foreach (var folder in await TargetFolder.GetFoldersAsync())
{
//await Task.Delay(800);
//递归
var innerGroup=await ReadFolder(folder, groups);
//groups.Add(innerGroup);
}
return group;
}
将图片文件StorageFile转换成BitmapImage,然后绑定在Image控件的Source上面
可以显示,但是加载很卡,并且页面切换之后崩溃是常态。发现一旦离开Image控件(包含在GridView中)所在的页面,UWP有较大概率回收这个资源。这个现象即使设置页面【 NavigationCacheMode="Required" 】使用缓存,回收现象依然存在。
=====
解决办法:
上面的将StorageFile转换成BitmapImage的方法是完全转换,而一般的做法是加载略缩图,那么这时候对计算的压力就小得多。而UWP已经提供了略缩图转换的方法了,相当的方便。
public async Task<BitmapImage> ConvertFile2ThumbNailImage(StorageFile file)
{
BitmapImage bitmapImage = new BitmapImage();
var thumbnail = await file.GetScaledImageAsThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.PicturesView);
bitmapImage.SetSource(thumbnail);
return bitmapImage;
}
图片很多的时候,就一定一定一定要使用略缩图再列表中显示。
但如果点开一张图片具体查看细节,还是要用完全转换的,不然图片是模糊的。
===
这也许是个常识问题😓