且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能

更新时间:2022-09-27 09:52:38

原文:【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能

目录

 

说明

最近空余时间研究了一下Win2D,它能为我们在UWP中提供一种类似GDI那样的绘图方法。就像传统Winform、MFC中那样重写OnPaint相关的方法,然后调用DrawLine绘制一条直线。有了它的帮助,我们可以在UWP中创建复杂的UI,听起来是不是很爽呢?

本文源码地址:https://github.com/sherlockchou86/ImageEditor.UWP

 

功能

主要功能已经完成,主要包括:

  • edit local and remote(net) images;
  • select layout(1:1 3:4 4:3), select backcolor for canvas, rotate and crop the background image;
  • tune brightness, degree of fuzzy and degree of sharpening;
  • add stickers onto canvas(download templates from internet);
  • apply a kind of filters(8 filters supported);
  • add tags such as location, @friends, adn etc;
  • draw on the canvas, you can select pen-size, pen-color(image) which you like;
  • save the canvas as a BitmapImage object, which you can directly use.

Note:

- 贴纸是根据自定义的json文件,自动从网上下载的。也就是说,贴纸不是固定不变的,你可以随时修改json文件,随时更新贴纸模板。详细json格式参见下面;

- 源码中我并没有创建单独的Library,你如果需要封装成独立的库,只需要创建一个Library Project,然后将'Controls', 'DrawingObjects', 'Images', 'Resources' and 'Tools' 目录拷贝到新建的Project中去即可,注意必要时需要修改NS。

下面是下载贴纸的json文件范例:

【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能

 

实现原理

其实原理相当简单,熟悉gdi绘图的人很容易理解:

- 绘制直线

graphics.DrawLine((float)Left, (float)(Top + (Height / 3)), (float)(Left + Width), (float)(Top + Height / 3), Colors.Orange, 0.3f, style);

- 填充圆形

graphics.FillCircle((float)Left, (float)Top, radius, DrawColor);

- 关于滤镜效果

Win2D中有现成的滤镜类,只需要传入Image,设置相关属性,那么返回来的便是滤镜效果。每种效果都是一个ICanvasImage,直接将其Draw在UI上或者一个CanvasBitmap上即可。

- 关于代码结构 

  【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能

可以看到,代码中创建了许多的DrawingObject类型,熟悉gdi的童鞋们相比已经知道什么情况了。

 

使用方法

 关于控件的使用方法,就更简单了。参见下面代码:

【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能

分三步:

- 创建一个ImageEditor的对象;

- 调用它的Show方法,给它传递StorageFile或者Uri参数;

- 注册它的ImageEditedCompleted事件,接收编辑完成的Image。

 

几张截图

几张截图,大部分是PC上的,手机上也适用。界面太糙,UI可以自己去设计,底图旋转,剪切功能没有完善,如果需要用得着的童鞋自己实现一下即可,不费力

【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能