博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UWP 浏览本地图片及对图片的裁剪
阅读量:7237 次
发布时间:2019-06-29

本文共 5367 字,大约阅读时间需要 17 分钟。

原文:

1.前言

准备给我的校园助手客户端添加一个修改头像的功能,但是查了好多资料都没有找到裁剪图片的简单的方法,最后才找到这个使用Launcher调用系统组件的简单办法,所以分享给大家。

2.界面部分:

很简单,就一个按钮和一个图片控件。
   
   

3.逻辑部分

首先是调用FileOpenPicker打开图片,为接下来的处理做准备
//创建和自定义 FileOpenPickervar picker = new Windows.Storage.Pickers.FileOpenPicker();picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail; //可通过使用图片缩略图创建丰富的视觉显示,以显示文件选取器中的文件picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;picker.FileTypeFilter.Add(".jpg");picker.FileTypeFilter.Add(".jpeg");picker.FileTypeFilter.Add(".png");picker.FileTypeFilter.Add(".gif");//选取单个文件Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();//文件处理if (file != null){    ……}
然后就是调用系统组件处理图片:
var inputFile = SharedStorageAccessManager.AddFile(file);var destination = await ApplicationData.Current.LocalFolder.CreateFileAsync("Cropped.jpg", CreationCollisionOption.ReplaceExisting);//在应用文件夹中建立文件用来存储裁剪后的图像var destinationFile = SharedStorageAccessManager.AddFile(destination);var options = new LauncherOptions();options.TargetApplicationPackageFamilyName = "Microsoft.Windows.Photos_8wekyb3d8bbwe";//待会要传入的参数var parameters = new ValueSet();parameters.Add("InputToken", inputFile);                //输入文件parameters.Add("DestinationToken", destinationFile);          //输出文件parameters.Add("ShowCamera", false);                   //它允许我们显示一个按钮,以允许用户采取当场图象(但是好像并没有什么卵用)parameters.Add("EllipticalCrop", true);                 //截图区域显示为圆(最后截出来还是方形)parameters.Add("CropWidthPixals", 300);parameters.Add("CropHeightPixals", 300);//调用系统自带截图并返回结果var result = await Launcher.LaunchUriForResultsAsync(new Uri("microsoft.windows.photos.crop:"), options, parameters);//按理说下面这个判断应该没问题呀,但是如果裁剪界面点了取消的话后面会出现异常,所以后面我加了try catchif (result.Status == LaunchUriStatus.Success && result.Result != null)	{	//对裁剪后图像的下一步处理	try	{		// 载入已保存的裁剪后图片		var stream = await destination.OpenReadAsync();		var bitmap = new BitmapImage();		await bitmap.SetSourceAsync(stream);		// 显示		Img.Source = bitmap;	}	catch(Exception ex)	{		Debug.WriteLine(ex.Message + ex.StackTrace);	}}

4.完整代码

using System;using System.Diagnostics;using Windows.ApplicationModel.DataTransfer;using Windows.Foundation.Collections;using Windows.Storage;using Windows.System;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Media.Imaging;//“空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 上有介绍namespace 图片裁剪{    ///     /// 可用于自身或导航至 Frame 内部的空白页。    ///     public sealed partial class MainPage : Page    {        public MainPage()        {            this.InitializeComponent();        }        private async void Button_Click(object sender, RoutedEventArgs e)        {            //创建和自定义 FileOpenPicker            var picker = new Windows.Storage.Pickers.FileOpenPicker();            picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail; //可通过使用图片缩略图创建丰富的视觉显示,以显示文件选取器中的文件            picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;            picker.FileTypeFilter.Add(".jpg");            picker.FileTypeFilter.Add(".jpeg");            picker.FileTypeFilter.Add(".png");            picker.FileTypeFilter.Add(".gif");            //选取单个文件            Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();            //文件处理            if (file != null)            {                var inputFile = SharedStorageAccessManager.AddFile(file);                var destination = await ApplicationData.Current.LocalFolder.CreateFileAsync("Cropped.jpg", CreationCollisionOption.ReplaceExisting);//在应用文件夹中建立文件用来存储裁剪后的图像                var destinationFile = SharedStorageAccessManager.AddFile(destination);                var options = new LauncherOptions();                options.TargetApplicationPackageFamilyName = "Microsoft.Windows.Photos_8wekyb3d8bbwe";                //待会要传入的参数                var parameters = new ValueSet();                parameters.Add("InputToken", inputFile);                //输入文件                parameters.Add("DestinationToken", destinationFile);    //输出文件                parameters.Add("ShowCamera", false);                    //它允许我们显示一个按钮,以允许用户采取当场图象(但是好像并没有什么卵用)                parameters.Add("EllipticalCrop", true);                 //截图区域显示为圆(最后截出来还是方形)                parameters.Add("CropWidthPixals", 300);                parameters.Add("CropHeightPixals", 300);                //调用系统自带截图并返回结果                var result = await Launcher.LaunchUriForResultsAsync(new Uri("microsoft.windows.photos.crop:"), options, parameters);                //按理说下面这个判断应该没问题呀,但是如果裁剪界面点了取消的话后面会出现异常,所以后面我加了try catch                if (result.Status == LaunchUriStatus.Success && result.Result != null)                {                    //对裁剪后图像的下一步处理                    try                    {                        // 载入已保存的裁剪后图片                        var stream = await destination.OpenReadAsync();                        var bitmap = new BitmapImage();                        await bitmap.SetSourceAsync(stream);                        // 显示                        Img.Source = bitmap;                    }                    catch (Exception ex)                    {                        Debug.WriteLine(ex.Message + ex.StackTrace);                    }                }            }        }    }}

5.效果图

注:那个图片裁剪部分的代码我是参考的这里的: 
(原文是意大利文,可以谷歌翻译一下再看)。

你可能感兴趣的文章
JS 推断URL中是否含有 http:// 假设没有则自己主动为URL加上
查看>>
基于ELK5.1(ElasticSearch, Logstash, Kibana)的一次整合
查看>>
利用recv和readn函数实现readline函数
查看>>
MacOs brew 命令行安装常见工具
查看>>
XDroidMvp 轻量级的Android MVP快速开发框架
查看>>
学习项目管理
查看>>
Android 非静态内部类导致内存泄漏原因深入剖析
查看>>
java zxing生成二维码
查看>>
Nginx安装lua-nginx-module模块
查看>>
elasticsearch 工具类
查看>>
【转】Eclipse 乱码 解决方案总结(UTF8 -- GBK)
查看>>
揭示同步块索引(上):从lock开始
查看>>
js中#代表什么
查看>>
MySQL中的RAND()函数使用详解(order by rand() 随机查询取前几条记录)
查看>>
PHP7运行环境搭建(Windows7)
查看>>
Ubuntu扩展系统盘容量,虚拟机下
查看>>
C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系...
查看>>
Java并发编程的艺术(二)——重排序
查看>>
php Restful设计
查看>>
A very simple C++ module to encrypt/decrypt strings based on B64 and Vigenere ciper.
查看>>