一、Win2D

Win2D是微软开源的项目

它的github地址是 https://github.com/Microsoft/Win2D

里面有详细的文档 http://microsoft.github.io/Win2D/html/Introduction.htm

大量Sample https://github.com/Microsoft/Win2D-samples

二、运用

1、上手win2d十分快,在nuget下载安装相应win2d插件即可使用了。

2、win2d里面有canvasControl ,CanvasAnimatedControl等实用的控件。

3、大量不懂的可以看Sample里面的代码。

三、例子

去年实习的时候,看过js实现下雨天的效果( https://github.com/maroslaw/rainyday.js ),所以一直想自己按照js的思路用C#实现一遍,win2d正好的适用。

最后是基本实现了效果,还有好多可以扩展优化的(其中几个效果会卡)。

1、实现背景高斯模糊

 blurEffect = new GaussianBlurEffect()
{
Source = imgbackground,
BlurAmount = 4.0f,
BorderMode = EffectBorderMode.Soft
};

2、加载背景

 imgbackground = await CanvasBitmap.LoadAsync(sender, imgPath, defaultDpi);

3、玻璃准备

 glassSurface = new CanvasRenderTarget(sender, imgW, imgH, defaultDpi);

4、画不同形状的雨滴

 /// <summary>
/// Draws a raindrop on canvas at the current position.
/// </summary>
public void Draw(RainyDay rainyday, CanvasDrawingSession context)
{
float orgR = r;
r = 0.95f * r;
if (r < )
{
clipGeo = CanvasGeometry.CreateCircle(context, new Vector2(x, y), r);
}
else if (colliding != null || yspeed > )
{
if (colliding != null)
{
var collider = colliding;
r = 1.001f * (r > collider.r ? r : collider.r);
x += (collider.x - x);
colliding = null;
}
float yr = + 0.1f * yspeed;
using (CanvasPathBuilder path = new CanvasPathBuilder(context))
{
path.BeginFigure(x - r / yr, y);
path.AddCubicBezier(new Vector2(x - r, y - r * ), new Vector2(x + r, y - r * ), new Vector2(x + r / yr, y));
path.AddCubicBezier(new Vector2(x + r, y + yr * r), new Vector2(x - r, y + yr * r), new Vector2(x - r / yr, y));
path.EndFigure(CanvasFigureLoop.Closed);
clipGeo = CanvasGeometry.CreatePath(path);
}
}
else
{
clipGeo = CanvasGeometry.CreateCircle(context, new Vector2(x, y), 0.9f * r);
}
r = orgR;
if (rainyday.Reflection != null)
{
using (context.CreateLayer(, clipGeo))
{
rainyday.Reflection(context, this);
}
}
if (clipGeo != null)
{
clipGeo.Dispose();
}
}

5、清除某个矩形区域

 context.Blend = CanvasBlend.Copy;
context.FillRectangle(x - r - , y - r - , * r + , * r + , Colors.Transparent);
context.Blend = CanvasBlend.SourceOver;

6、UWP全屏设置

 private void btnFullScreen_IsChecked(object sender, RoutedEventArgs e)
{
if (btnFullScreen.IsChecked==true)
{
ApplicationView.TryUnsnapToFullscreen(); ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
toolSP.Visibility = Visibility.Collapsed;
}
else
{
ApplicationView.GetForCurrentView().ExitFullScreenMode();
toolSP.Visibility = Visibility.Visible;
}
}

四、实现效果动图

图一:

图2:(全屏)

实现源码:https://github.com/Neilxzn/RainDayForUAP

完成这个例子还是挺爽的。继续努力,学多点,看多点

1、WIN2D学习记录(win2d实现JS雨天效果)的更多相关文章

  1. DWZ学习记录--关闭loading效果

    修改文件:jquery-1.7.1.js 查找内容:7142行 ajaxSettings: { 修改内容:global: true=>global: false修改目的:关闭loading效果

  2. D3.js学习记录【转】【新】

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 我的three.js学习记录(二)

    通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...

  4. 我的three.js学习记录(三)

    此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...

  5. Node.js权威指南学习记录

    学习nodeJS权威指南的学习记录 导航: 1.console模块 2.全局变量 3.Buffer对象 4.事件对象 5.网络请求 6.文件操作对象 一. COMMON.js的学习.(commonJS ...

  6. JS继续学习记录(一)

    JS继续学习记录(一) 总感觉自己的js code写的还算可以,但是又深知好像只知道一些皮毛,所以打算仔细记录一下js晋级学习过程,日日往复 先记录一下自己目前对js的了解吧(20180828) js ...

  7. vue.js学习记录

    vue.js学习记录 文章已同步我的github笔记https://github.com/ymblog/blog,欢迎大家加star~~ vue实例 生命周期 beforeCreate:不能访问thi ...

  8. JS正则表达式学习记录

    JS:正则表达式学习记录 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  9. 我的学习笔记之node----node.js+socket.io实时聊天(1) (谨此纪念博客开篇)

    本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...

随机推荐

  1. Java-密码加密

    介绍两种密码加密的方法: 这两种很常见可以再百度随意找到. 1.摩斯密码:说道密码加密不得不提的方法.很是经典. 首先说一下他的对照表,直接上图. 核心思想就是替换明文密码,将字符对应的替换成-与.两 ...

  2. DP4J -- mnist

    标签(空格分隔): DeepLearning mnist mnist是一个数据集,其中包含很多手写数字的图片,每张图片都已经打上了label: Deep Learning 传统的机器学习神经网络由一层 ...

  3. MRPT图形界面

    mrpt-gui模块中提供了三个类以实现显示GUI窗口,每个都有特定的用途: mrpt::gui::CDisplayWindow : Displays 2D bitmap images, and op ...

  4. ECharts-图表回执组件

    测试地址:http://echarts.baidu.com/doc/example.html

  5. nginx ssl 更换问题

    公司之前使用的是免费startssl证书,听说IOS 以后不信任这些免费的验证不严格的证书,公司果断购买了一个统配域名证书,其实不用貌似也没什么事,主要是提交app的时候得说明理由,被拒的可能性比较大 ...

  6. avalon复杂绑定

    样式操作:ms-css-样式名=“样式值”,ms-class ms-css-width="prop"(自动补px) ms-css-height="{{prop}}%&qu ...

  7. IE9 打不开界面也不报错,只有打开控制台才会显示 - console

    IE9下,打开界面不报错也不展示数据,打开控制台时就能加载出数据,有可能是代码中有console

  8. 图片的DataURL技术

    DataURL基本原理 在网页中我们通常用下面的方式来引用一张图片,这样当我们请求网页的时候,浏览器也会想服务器发起一个请求,去请求这张图片. <img src='images/test.jpg ...

  9. String.getBytes()

    package entity; import java.io.UnsupportedEncodingException; public class Test { public static void ...

  10. LoadLibrary失败,GetLastError MOD_NOT_FOUND

    即使传入的.dll文件存在,也可能返回这个错误.因为加载的DLL库可能以来其他库,尤其是编译器的dll. 以腾讯的debug版libtim.dll为例:如果没有msvcr100d.dll和msvcp1 ...