2018-12-25-win2d-图片水印
title | author | date | CreateTime | categories |
---|---|---|---|---|
win2d 图片水印
|
lindexi
|
2018-12-25 10:37:52 +0800
|
2018-03-19 08:37:34 +0800
|
水印 win2d UWP 渲染
|
本文告诉大家如何使用 win2d 给图片加上水印。
安装
首先需要使用 Nuget 安装 win2d ,安装参见win10 uwp win2d 入门 看这一篇就够了
如果没有更新 dot net core 那么在运行可能会出现下面异常System.TypeLoadException: Requested Windows Runtime type 'Microsoft.Graphics.Canvas.Text.CanvasTextLayout' is not registered
那么直接更新 dot net core 到最新,然后清理项目就可以
获得图片
要对图片处理,首先需要拿到图片,拿到图片的方法可以是从剪贴板获得或者使用文件选取拿到。
如果是从剪贴板拿到图片,需要把图片保存到本地的临时文件夹,然后拿到文件。
如果使用文件选取拿到文件,可以使用这个方法
var pick = new FileOpenPicker();
pick.FileTypeFilter.Add(".jpg");
pick.FileTypeFilter.Add(".png"); var file = await pick.PickSingleFileAsync();
注意后缀名用的是 .
+后缀名,这里我写的是很少的图片后缀名,实际上可以支持的图片后缀是很多。
创建图片
如果需要对图片处理,使用的是 CanvasRenderTarget ,可以看到这个类需要传入两个参数ICanvasResourceCreatorWithDpi
,Size
,我也就使用这个函数
在 win2d 使用图片需要 CanvasBitmap ,这个类不可以直接创建,需要通过LoadAsync
、CreateFromBytes
、CreateFromColors
、CreateFromSoftwareBitmap
这些方法来创建,下面就使用第一个方法创建。
第一个方法有很多重载,需要注意,如果不是解决方案里的文件,千万不要使用文件名或 URI 的方法,因为经常出现文件无法访问。
如果不是解决方案里的文件,千万不要使用 fileName 或 URI 的方法读取图片,因为一般的文件是没有权限。即使使用 FilePick 拿到文件,文件的路径也可能拿不到。
建议使用的方法是使用流的重载,在上面,已经拿到文件,这时把文件读出来,传入就可以
var duvDbecdgiu =
await CanvasBitmap.LoadAsync(new CanvasDevice(true), await _file.OpenAsync(FileAccessMode.Read));
处理图片
现在创建 CanvasRenderTarget 处理图片,在使用 CanvasRenderTarget 记得释放,所以一般需要使用下面代码
using (var canvasRenderTarget = new CanvasRenderTarget(duvDbecdgiu, duvDbecdgiu.Size))
创建一个图片处理,大小就和图片大小相同。
在图片添加文字的方法实际上和在 win2d 的其他处理相同,具体可以去看我的win2d博客。
using (var dc = canvasRenderTarget.CreateDrawingSession())
{
dc.DrawImage(duvDbecdgiu);
dc.DrawText("lindexi",
new Vector2((float) (duvDbecdgiu.Size.Width / 2), (float) duvDbecdgiu.Size.Height/2), Colors.Black);
}
也许大家会觉得上面的DrawImage
是做什么的,刚才不是从图片创建的?实际上从图片创建,但是没有画图片,也就是在使用的时候需要先画图片,然后画出文字。
保存
现在尝试保存一个图片,保存需要让用户选一个文件
var pick = new FileSavePicker();
pick.FileTypeChoices.Add("image", new List<string>() {".jpg"}); var file = await pick.PickSaveFileAsync();
保存很简单
await canvasRenderTarget.SaveAsync(await file.OpenAsync(FileAccessMode.ReadWrite),CanvasBitmapFileFormat.Jpeg);
注意保存的格式可以是很多,但是后缀名需要和保存的格式相同。
现在这个功能写在图床
最新文章
- Ubuntu下freeradius的EAP-MD5,PEAPv0/EAP-MSCHAPv2,EAP-TTLS/MD5,EAP-TTLS/MSCHAPv2方式认证(基于mysql)
- SPSS 统计图形
- django-redis和redis-py
- VS2015/2013/2012 IIS Express Debug Classic ASP
- .net委托(转载)
- paip.hql的调试故障排查流程总结
- PHP技术开发微信公众平台
- android检查自动升级
- 吐槽:Lambda表达式
- 实现怎样支持Android重力感应器Sensor编程
- ZOJ 3080 ChiBi(spfa)
- 最大流量dinci模板
- mysql8绿色免安装win64版本(自带heidisql.exe客户端)应该兼容老版第三方工具。
- margin-塌陷问题
- 1363. ZigZag Conversion
- BZOJ4128Matrix——hash+矩阵乘法+BSGS
- ASP.NET 前端Ajax获取数据并刷新
- 联想y720 淋了雨,字体变得模糊了
- [ SHELL编程 ] shell编程中数值计算方法实例
- MySQL备份与还原详细过程示例
热门文章
- 解决git status中文路径乱码
- Codecraft-17 and Codeforces Round #391 - C
- postcss-px-to-viewport 的 exclude 配置无效
- webRTC脱坑笔记(四)— windows下Nginx对Node服务的反向代理
- hive之调优
- 安装Windows与CentOS双系统
- Ubuntu12.04安装配置x11vnc
- Linux重定向命令(stdout, stdin, stderr)
- 【NLP新闻-2013.06.03】New Book Where Humans Meet Machines
- spring-boot整合Mybatis多数据源案例