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------------
UWP 后台保存图片的更多相关文章
- win10 uwp 后台获取资源
本文告诉大家,从后台代码获取界面定义的资源. 如果一个资源是写在 App 的资源,那么如何使用代码去获得他? 简单的方法是使用下面的代码 Application.Current.Resources[& ...
- win10 uwp DataContext
本文告诉大家DataContext的多种绑法. 适合于WPF的绑定和UWP的绑定. 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法使用.当然,可以在新手面前秀下,一个页面 ...
- dotnet 从入门到放弃的 500 篇文章合集
本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...
- 2018-8-10-dotnet-从入门到放弃的-500-篇文章合集
title author date CreateTime categories dotnet 从入门到放弃的 500 篇文章合集 lindexi 2018-08-10 19:16:52 +0800 2 ...
- ASP.Net MVC3 图片上传详解(form.js,bootstrap)
图片上传的插件很多,但很多时候还是不能切合我们的需求,我这里给大家分享个我用一个form,file实现上传四张图片的小demo.完全是用jquery前后交互,没有用插件. 最终效果图如下: 玩过花田人 ...
- ajax上传图片 jquery插件 jquery.form.js 的方法 ajaxSubmit; AjaxForm与AjaxSubmit的差异
先引入脚本 这里最好是把jquery的脚本升级到1.7 <script src="js/jquery-1.7.js" type="text/javascript& ...
- bootstrap-paginator 分页插件笔记
[MVC]bootstrap-paginator 分页插件笔记 bootstrap-paginator基于bootstrap框架,使用起来非常简单.官网:http://harttle.github ...
- SpringBoot--web版的ocr
这个项目主要是为了熟悉SpringBoot搭建web项目,及打war包,部署到tomcat中 先贴页面吧 页面很low 毕竟我只是菜鸟,该app程序功能已经写完了,上传图片到服务器,后台接口解析图片中 ...
- C#中富文本编辑器Simditor带图片上传的全部过程(MVC架构的项目)
描述:最近c#项目中使用富文本编辑器Simditor,记录一下以便以后查看. 注:此项目是MVC架构的. 1.引用文件 项目中引用相应的css和js文件,注意顺序不能打乱,否则富文本编辑器不会正常显示 ...
随机推荐
- Linux安装Axis C构建WebService服务
在安装Axis C++之前有两个组件是必须安装的,分别是Apache HTTP Server以及用于处理XML的程序Xerces:为了编译Axis以及Apache HTTPD,你的Linux机器还应该 ...
- XHTML中button加入超链接以及使插入图片与屏幕一样大
1.button加入超链接 (1)假设是在本页跳转到新页面.用 <span style="font-size:18px;"><input type="b ...
- CentOS笔记-其他杂记
1.忘记密码时,可以用single模式来修改密码,为了安全,可以禁用single模式,参考网址如下 Centos服务器禁止单用户模式(single)来增强系统安全 2.远程登录:ssh root@xx ...
- iOS 开发常用的调试工具
前言 最近博主临近毕业季,为了完美的写一篇毕业论文,真是:“锄禾日当午,汗滴禾下土”<—— 这句诗跟毕业我写毕业论文没任何一毛钱关系,我就是突然想吟湿了.不过博主作为网络工程专业的好青年,曾经的 ...
- TCO 2016 Round 1B
problem 250 Problem Statement Vasa likes to construct sequences of numbers. If you tell him a positi ...
- 如何查看一个Application是32位的还是64位的?
使用process explorer查看,找到对应的进程. 注册表的路径是Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ 使用powershell查 ...
- Android 走向MD的配色风格
这是一些google官方推出的推荐色值 下面补充上对应的xml文件,省得大家再去自己写 <?xml version="1.0" encoding="utf-8&qu ...
- 网站页面打开浏览器table中显示图片
就类似博客园这种:
- 第一次往github上传文件步骤
第一次往github上传文件步骤: 1> 从右上角 '+' 位置下拉菜单中,创建一个repository 2>从右上角头像位置下拉菜单 setting中设置 SSH keys 3>打 ...
- 每次rand出来都是41?说好的随机数呢?!
rand()函数是C++标准函数库提供的随机数生成器,生成0-RAND_MAX之间的一个"伪随机"整数,理论上可以产生的最大数值为2^16-1,即32767. rand()函数不接 ...