title author date CreateTime categories
win10 uwp win2d 特效
lindexi
2018-10-02 21:20:46 +0800
2018-6-4 18:9:44 +0800
UWP win2d

本文告诉大家 win2d 里面的特效

在开始之前先创建一个项目,这里创建 SeexerefaspeaRoulejur 最低版本 17134 选择比较新的版本可以解决之前一些版本存在的坑

通过 Nuget 安装 Win2d 库

先在主页面添加引用 xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml" 然后创建空白的 Canvas 请看代码

  1. <Grid>
  2. <canvas:CanvasControl x:Name="Canvas" ClearColor="#F256FA"></canvas:CanvasControl>
  3. </Grid>

在资源文件添加两张图片 1.png 2.png 作为素材,在 win2d 有事件 CreateResources 可以用来创建图片

先在后台引用 win2d 需要使用的代码

  1. using Microsoft.Graphics.Canvas;
  2. using Microsoft.Graphics.Canvas.UI;
  3. using Microsoft.Graphics.Canvas.UI.Xaml;

在前台添加 CreateResources 的函数

  1. <canvas:CanvasControl x:Name="Canvas" ClearColor="#F256FA" CreateResources="Canvas_OnCreateResources" Draw="Canvas_OnDraw"></canvas:CanvasControl>

在后台添加 Canvas_OnCreateResources 创建图片

  1. private CanvasBitmap Image2 { get; set; }
  2.  
  3. private CanvasBitmap Image1 { get; set; }
  4.  
  5. private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
  6. {
  7.  
  8. }
  9.  
  10. private void Canvas_OnCreateResources(CanvasControl sender, CanvasCreateResourcesEventArgs args)
  11. {
  12. args.TrackAsyncAction(CreateImage(sender).AsAsyncAction());
  13. }
  14.  
  15. private async System.Threading.Tasks.Task CreateImage(CanvasControl sender)
  16. {
  17. try
  18. {
  19. Image1 = await CanvasBitmap.LoadAsync(sender, new Uri("ms-appx:///assets/1.png"));
  20. Image2 = await CanvasBitmap.LoadAsync(sender, new Uri("ms-appx:///assets/2.jpg"));
  21. }
  22. catch (FileNotFoundException e)
  23. {
  24. Debug.WriteLine(e.Message);
  25. }
  26. }

注意在获取图片时,需要设置图片为内容,请看 win10 uwp 访问解决方案文件

如果没有设置图片为内容,就会出现 FileNotFoundException 而且信息是

  1. "系统找不到指定的文件。 (Exception from HRESULT: 0x80070002)"

下面开始告诉大家各个特效是如何使用

AlphaMaskEffect

在使用特效之前需要引用代码

  1. using Microsoft.Graphics.Canvas.Effects;

然后在 Canvas_OnDraw 添加一些代码

  1. private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
  2. {
  3. var alphaMask = new CanvasCommandList(sender);
  4.  
  5. using (var canvasDrawingSession = alphaMask.CreateDrawingSession())
  6. {
  7. canvasDrawingSession.FillRectangle(new Rect(10, 10, 200, 200), Color.FromArgb(100, 0, 0, 0));
  8. }
  9.  
  10. var alphaMaskEffect = new AlphaMaskEffect {AlphaMask = alphaMask, Source = Image2};
  11.  
  12. using (var canvasDrawingSession = args.DrawingSession)
  13. {
  14. canvasDrawingSession.DrawImage(alphaMaskEffect);
  15. }
  16. }

在之前已经写过如何使用 AlphaMaskEffect 的博客了,所以本文就简单告诉大家如何使用

运行可以看到下面界面

更多关于 AlphaMaskEffect 请看 win10 uwp win2d 入门 看这一篇就够了

代码 win2d AlphaMaskEffect-CSDN下载

ArithmeticCompositeEffect

通过算法组合两张图片,这个特效是对两张图片的每个像素对应的计算,计算公式是

  1. result = (Source1 * Source1Amount) + (Source2 * Source2Amount) + (Source1 * Source2 * MultiplyAmount) + Offset

通过下面的公式可以做到

相加两张图片

需要通过下面的设置

  1. Source1Amount = 1
  2. Source2Amount = 1
  3. MultiplyAmount = 0
  4. Offset = 0

在 Canvas_OnDraw 的代码

  1. var arithmeticCompositeEffect = new ArithmeticCompositeEffect()
  2. {
  3. Source1 = Image1,
  4. Source2 = Image2,
  5. Source1Amount = 1,
  6. Source2Amount = 1,
  7. MultiplyAmount = 0,
  8. Offset = 0
  9. };
  10.  
  11. args.DrawingSession.DrawImage(arithmeticCompositeEffect);

效果

通过修改 Source1Amount 和 Source2Amount 可以看到不同的相加效果

相乘

设置下面的系数可以让两张图片相乘

  1. Source1Amount = 0
  2. Source2Amount = 0
  3. MultiplyAmount = 1
  4. Offset = 0

在 Canvas_OnDraw 的代码

  1. private void Canvas_OnDraw(CanvasControl sender, CanvasDrawEventArgs args)
  2. {
  3. var arithmeticCompositeEffect = new ArithmeticCompositeEffect()
  4. {
  5. Source1 = Image1,
  6. Source2 = Image2,
  7. Source1Amount = 0,
  8. Source2Amount = 0,
  9. MultiplyAmount = 1,
  10. Offset = 0
  11. };
  12.  
  13. args.DrawingSession.DrawImage(arithmeticCompositeEffect);
  14. }

可以看到只要第一张不存在的地方,在第二张也无法显示

相减

通过设置 Source1Amount 为 1 设置 Source2Amount 可以 -1 可以让图片1减去图片2

  1. var arithmeticCompositeEffect = new ArithmeticCompositeEffect()
  2. {
  3. Source1 = Image1,
  4. Source2 = Image2,
  5. Source1Amount = 1,
  6. Source2Amount = -1,
  7. MultiplyAmount = 0,
  8. Offset = 0
  9. };
  10.  
  11. args.DrawingSession.DrawImage(arithmeticCompositeEffect);

但是更多的时候是引入参数 t 也就是

  1. Source1Amount = 1 - t
  2. Source2Amount = t

我在界面添加一个 Slider 让他控制 t 的大小

<iframe src="https://www.youtube.com/embed/k8kTRXkaQkY?ecver=2" width="480" height="360" frameborder="0" allow="autoplay; encrypted-media" style="position:absolute;width:100%;height:100%;left:0" allowfullscreen></iframe>

视频请看 https://youtu.be/k8kTRXkaQkY

之外,还可以设置图片反色,设置反色的时候只能设置一张图片反色

反色的公式是

  1. Source1Amount = -1
  2. Source2Amount = 0
  3. MultiplyAmount = 0
  4. Offset = 1

修改一下代码

  1. var arithmeticCompositeEffect = new ArithmeticCompositeEffect()
  2. {
  3. Source1 = Image1,
  4. Source2 = Image2,
  5. Source1Amount = -1,
  6. MultiplyAmount = 0,
  7. Offset = 1,
  8. };
  9.  
  10. args.DrawingSession.DrawImage(arithmeticCompositeEffect);

也就是通过修改系数可以做出很多特效,请自己尝试修改这几个属性

ArithmeticCompositeEffect Class

代码 win2d ArithmeticCompositeEffect-CSDN下载

第三章(介绍篇) 图像特效Effect

第三章(特殊篇) 图像特效Effect

2018-10-2-win10-uwp-win2d-特效的更多相关文章

  1. win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl

    本文来告诉大家 CanvasVirtualControl ,在什么时候使用这个控件. 在之前的入门教程win10 uwp win2d 入门 看这一篇就够了我直接用的是CanvasControl,实际上 ...

  2. win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑

    本文来告诉大家如何通过 Win2d 完全控制笔迹绘制逻辑,本文适合用来实现复杂的自定义逻辑,可以完全控制笔迹的行为.包括在书写过程中切换模式,如进行手势擦除切换为橡皮擦模式 本文提供的方法适合用来做复 ...

  3. win10 uwp 渲染原理 DirectComposition 渲染

    本文来告诉大家一个新的技术DirectComposition,在 win7 之后(实际上是 vista),微软正在考虑一个新的渲染机制 在 Windows Vista 就引入了一个服务,桌面窗口管理器 ...

  4. win10 uwp 萤火虫效果

    原文:win10 uwp 萤火虫效果 本文在Nukepayload2指导下,使用他的思想用C#写出来. 本文告诉大家,如何使用 win2d 做出萤火虫效果. 安装 win2d 安装win2d的方法请使 ...

  5. win10 uwp 毛玻璃

    毛玻璃在UWP很简单,不会和WPF那样伤性能. 本文告诉大家,如何在 UWP 使用 win2d 做毛玻璃. 毛玻璃可以使用 win2D 方法,也可以使用 Compositor . 使用 win2d 得 ...

  6. win10 uwp 使用 Microsoft.Graph 发送邮件

    在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...

  7. Win10 UWP开发实现Bing翻译

    微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...

  8. Win10/UWP开发—使用Cortana语音与App后台Service交互

    上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...

  9. Win10 UWP应用发布流程

    简介 Win10 UWP应用作为和Win8.1 UAP应用不同的一种新应用形式,其上传至Windows应用商店的流程也有了一些改变. 这篇博文记录了我们发布一款Win10 UWP应用的基本流程,希望为 ...

  10. win10 uwp 列表模板选择器

    本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...

随机推荐

  1. Java语言基础(方法重载概述和基本使用)

    方法重载概述: 在同一个类中,允许存在一个以上的同名方法,只要他们的参数列表不同(即参数类型或者参数个数)即可. 方法重载特点: 1. 与返回值类型无关,只看方法名和参数列表 2. 在调用的时候,虚拟 ...

  2. 20181019-JSP 教程/简介

    JSP 教程 这是第一篇JSP JSP与PHP.ASP.ASP.NET等语言类似,运行在服务端的语言. JSP(全称Java Server Pages)是由Sun Microsystems公司倡导和许 ...

  3. ODB Examples

    http://www.codesynthesis.com/products/odb/examples.xhtml The following list gives an overview of the ...

  4. 【转】最全的 pip 使用指南,50% 你可能没用过

    [转]最全的 pip 使用指南,50% 你可能没用过 所有的 Python 开发者都清楚,Python 之所以如此受欢迎,能够在众多高级语言中,脱颖而出,除了语法简单,上手容易之外,更多还要归功于 P ...

  5. python监控ip攻击,服务器防火墙

    '''写一个程序,监控nginx的日志,如果有人攻击就加入黑名单 把ip加入黑名单的策略是,1分钟之内,如果同一个ip请求超过200次,那就加入黑名单''' '''分析:1.打开文件 2.循环读取 3 ...

  6. kafka consumer 自动提交 offset

    org.apache.kafka.clients.consumer.KafkaConsumer#pollOnce private Map<TopicPartition, List<Cons ...

  7. 【EWM系列】SAP EWM Warehouse Order Creation

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[EWM系列]SAP EWM Warehouse ...

  8. SVG.JS 画弧线

    需求描述: 使用svg.js,绘制一个弧线.下图绿色弧线. 准备工作: 1.了解SVG Path中的A指令 详细文档,请戳这里 给定x半径.y半径后,经过指定的两点,可以有2个椭圆,因此两点间有2条弧 ...

  9. Django密码错误报错提醒

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOwAAAIBCAYAAABKllNhAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw

  10. Java核心技术

    [Java核心技术36讲]1.谈谈你对Java平台的理解 2.Exception和Error有什么区别 3.谈谈final.finally.finalize有什么不同?4.强引用.软引用.弱引用.虚引 ...