在做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------------

UWP 后台保存图片的更多相关文章

  1. win10 uwp 后台获取资源

    本文告诉大家,从后台代码获取界面定义的资源. 如果一个资源是写在 App 的资源,那么如何使用代码去获得他? 简单的方法是使用下面的代码 Application.Current.Resources[& ...

  2. win10 uwp DataContext

    本文告诉大家DataContext的多种绑法. 适合于WPF的绑定和UWP的绑定. 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法使用.当然,可以在新手面前秀下,一个页面 ...

  3. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  4. 2018-8-10-dotnet-从入门到放弃的-500-篇文章合集

    title author date CreateTime categories dotnet 从入门到放弃的 500 篇文章合集 lindexi 2018-08-10 19:16:52 +0800 2 ...

  5. ASP.Net MVC3 图片上传详解(form.js,bootstrap)

    图片上传的插件很多,但很多时候还是不能切合我们的需求,我这里给大家分享个我用一个form,file实现上传四张图片的小demo.完全是用jquery前后交互,没有用插件. 最终效果图如下: 玩过花田人 ...

  6. ajax上传图片 jquery插件 jquery.form.js 的方法 ajaxSubmit; AjaxForm与AjaxSubmit的差异

    先引入脚本  这里最好是把jquery的脚本升级到1.7 <script src="js/jquery-1.7.js" type="text/javascript& ...

  7. bootstrap-paginator 分页插件笔记

    [MVC]bootstrap-paginator 分页插件笔记   bootstrap-paginator基于bootstrap框架,使用起来非常简单.官网:http://harttle.github ...

  8. SpringBoot--web版的ocr

    这个项目主要是为了熟悉SpringBoot搭建web项目,及打war包,部署到tomcat中 先贴页面吧 页面很low 毕竟我只是菜鸟,该app程序功能已经写完了,上传图片到服务器,后台接口解析图片中 ...

  9. C#中富文本编辑器Simditor带图片上传的全部过程(MVC架构的项目)

    描述:最近c#项目中使用富文本编辑器Simditor,记录一下以便以后查看. 注:此项目是MVC架构的. 1.引用文件 项目中引用相应的css和js文件,注意顺序不能打乱,否则富文本编辑器不会正常显示 ...

随机推荐

  1. 2016/06/13 phpexcel 未完待续

    ①准备工作: 1,php版本不能太低 2,去官网下载PHPExcel插件    http://phpexcel.codeplex.com/ 3,解压后提取classes文件夹到工作目录,并重命名为PH ...

  2. UVA - 11019 Matrix Matcher hash+KMP

    题目链接:传送门 题解: 枚举每一行,每一行当中连续的y个我们hash 出来 那么一行就是 m - y + 1个hash值,形成的一个新 矩阵 大小是 n*(m - y + 1), 我们要找到x*y这 ...

  3. 3531: [Sdoi2014]旅行

    3531: [Sdoi2014]旅行 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 1731  Solved: 772 [Submit][Statu ...

  4. SpringInAction4笔记——装配

    重点:常用的上下文环境 AnnotationConfigApplicationContext ClassPathXmlApplicationContext FileSystemXmlApplicati ...

  5. LIS(最长上升子序列)的三种经典求法

    求最长上升子序列的三种经典方案: 给定一个长度为 \(N\) 的数列,求它数值单调递增的子序列长度最大为多少.即已知有数列 \(A\) , \(A=\{A_1,A_2....A_n\}\) ,求 \( ...

  6. Android cookies正确的更新方式

    之前的更新方式 一搜cookies的使用,非常easy搜到非常多文章.主要的几步大致同样.例如以下图: 基本上都要求大家先调用cookieManager.removeAllCookie()或者调用 c ...

  7. UDP 端到端

    创建发送端 1.建立DatagramSocket对象,该端点建立,系统会随机分配一个端口,如果不想随机分配,可手动指定. 2.将数据进行packet封装,必须指定目的地址和端口. 3.通过socket ...

  8. Delphi ActiveForm发布全攻略

    论坛上很多朋友(也包括我)提到ActiveForm的发布问题,都没有得到很好的解决.下面是本人开发ActiveForm的一点经验,拿出来跟大家分享,开发环境为 Win2000Server,IIS5.0 ...

  9. 数据结构之 图论---基于邻接矩阵的广度优先搜索遍历(输出bfs遍历序列)

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...

  10. AjaxControlToolkit没有通过WebResource.axd加载css导致ajaxToolkit:TabPanel无法显示正确的样式

    https://stackoverflow.com/questions/3318092/what-is-webresource-axd WebResource.axd provides access ...