仿照微软照片,自己做一个相册。做法是递归加载加载本地图片库
大概就是:
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; }图片很多的时候,就一定一定一定要使用略缩图再列表中显示。
但如果点开一张图片具体查看细节,还是要用完全转换的,不然图片是模糊的。
===
这也许是个常识问题😓