UWP 后台保存图片
在做UWP的时候,有一个需求,就是点击下载按钮,需要将当前页面中的Image控件中显示的图片保存下来。
既然聊到了下载图片,索性把添加图片也讲一下。
一:给Image控件添加图片
xaml代码:
<Image Source="Assets/icon/logo.png"
Name="Logo"/>
在xaml里写样式特别简单,只要在Image的Source属性里填上图片的地址就好了。
c#代码:
Logo.Source = new BitmapImage(new Uri("Assets/icon/logo.png"));
通过IDE查看定义可以看到,Image控件的Source属性的类型是ImageSource类型,但是再查看ImageSource的定义发现是空的。
public ImageSource Source { get; set; }
而查看BitmapImage类的定义发现是继承于ImageSource类。 ImageSource是父类而BitmapImage是子类。
说明我们在用c#代码写的时候,不能直接通过父类去定义。例如:
Logo.Source = new ImageSource(); //这种方式是错误的,会报错
而应该用子类去写
Logo.Source = new BitmapImage(new Uri("Assets/icon/logo.png"));
二:BitmapImage 位图类
BitmapImage类 有一个 类型是Uri 类的参数的构造函数
public BitmapImage(Uri uriSource);
通过这个构造函数将图片的地址赋值上去。
三:Uri类
Uri: Uniform Resource identifier 统一资源标识符
简单来理解就是某个东西的标识,是一串字符串,用来标识的。
四:BackgroundDownloader 后台下载器类
如果你要保存的图片很大或者文件很大的时候,建议使用BackgroundDownloader后台下载类。
//定义一个后台下载器
BackgroundDownloader backgroundDownload = new BackgroundDownloader();
//创建一个下载任务对象
DownloadOperation download = backgroundDownload.CreateDownload(uri, newFile);
//开始下载
await download.StartAsync();
其中用调用下载器的CreateDownload()方法,创建一个下载任务
public DownloadOperation CreateDownload(Uri uri, IStorageFile resultFile);
查看定义可以看到有两个参数
第一个参数是需要下载文件的uri地址,第二个参数是IStorageFile 类型的本地文件对象
五:IStorageFile 接口
看到前面带了个I就知道是一个存储文件的接口。
interface 接口
六:StorageFile 存储文件类
该类继承了IStorageFile 接口。
七:StorageFolder 文件夹类
在系统中图片文件夹里创建一个文件夹
//在系统已知的文件夹中找到图片 这个文件夹 然后在里面创建一个名字为ONE的文件夹
StorageFolder folder = await KnownFolders.PicturesLibrary.CreateFolderAsync("ONE", CreationCollisionOption.OpenIfExists);
第二个参数是指当你在创建文件夹时遇到已有文件夹的时候,该怎么做。
然后可以用StorageFolder里的CreateFileAsync() 方法创建一个StorageFile对象
StorageFile newFile = await folder.CreateFileAsync(imageName, CreationCollisionOption.OpenIfExists);
CreateFileAsync()定义
public IAsyncOperation<StorageFile> CreateFileAsync(string desiredName, CreationCollisionOption options); //名字 创建时发生文件碰撞怎么办
八:总结一下思路
1.先用StorageFolder创建一个文件夹
2.再用CreateFileAsync() 创建一个文件
3.创建一个后台下载器
4.创建一个后台任务,参数是uri和StorageFile
public async Task SaveImage(string imageName,string imageUri)
{
BackgroundDownloader backgroundDownload = new BackgroundDownloader(); StorageFolder folder = await KnownFolders.PicturesLibrary.CreateFolderAsync("ONE", CreationCollisionOption.OpenIfExists);
StorageFile newFile = await folder.CreateFileAsync(imageName, CreationCollisionOption.OpenIfExists); Uri uri = new Uri(imageUri);
DownloadOperation download= backgroundDownload.CreateDownload(uri, newFile); await download.StartAsync(); }
将iamge控件上的地址和名字传过来就ok了。
--------some words---------
1.Source 来源
2.Bit 点
3.map 地图
4.bitmap 位图
5.Uri:Uniform Resource identifier 统一资源标识符
6.Storage 存储
7.Folder 文件夹
8.Interface 接口
9.Collision 碰撞
10. CreationCollisionOption 创建时发生碰撞的操作
11.
-------- -the end------------
最新文章
- 配置Visual Studio Code在Mac上作为.NET Core的IDE
- CSS Table Gallery
- JAVA 入门编程
- java 反射: 当Timestamp类型的属性值为null时,设置默认值
- HDU 2087 kmp模板题
- C# 请求外部服务的办法
- [转]Javascript定义类的三种方法
- window.addEventListener来解决让一个js事件执行多个函数
- Delphi IDE下载全地址
- 数值类对象:NSNumber,NSValue,NSNull
- JS 单击复制,复制后变为已复制
- .OCX、.dll文件注册命令Regsvr32的使用
- WPF笔记(1.3 属性元素)——Hello,WPF!
- Ionic 2 中创建一个照片倾斜浏览组件
- Cloudera: Start Impala service by cloudera manager in docker quickstart image
- Torch的安装和学习
- ThinkPHP 数据库操作(五) : 存储过程、数据集、分布式数据库
- php数组函数有哪些操作?php数组函数的应用
- php 对象数组互转
- 我要搬家到csdn,大家到那里来看我吧,平台更大,看到的人更多!
热门文章
- openwrt gstreamer实例学习笔记(四. gstreamer Bins)
- Jquery根据name取得所有选中的Checkbox值
- poj 1179 $Polygon$(断环成链)
- C# delegate Action<;T>; lambda表达式
- 在centos7下手工安装和配置Nginx
- iframe引入页面
- hdu acm 2844 Coins 解题报告
- Gym - 100342J:Triatrip(Bitset加速求三元环的数量)
- POJ2443 Set Operation (基础bitset应用,求交集)
- [Selenium] Android HTML5 中 Web Storage