个人资料

跳过导航链接首页 > 博客列表 > 博客正文

UWP加载图片并且显示在列表中的bitmapImage转换的问题

分类:

仿照微软照片,自己做一个相册。做法是递归加载加载本地图片库

大概就是:

		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;
		}
图片很多的时候,就一定一定一定要使用略缩图再列表中显示。

但如果点开一张图片具体查看细节,还是要用完全转换的,不然图片是模糊的。

===

这也许是个常识问题😓


admin
最初发表2019/10/22 14:23:19 最近更新2019/10/22 14:43:17 1676
为此篇作品打分
10
   评论