使用 Win2D 绘制带图片纹理的圆(或椭圆)
使用 Win2D 绘制图片和绘制椭圆都非常容易,可是如何使用 Win2D 绘制图片纹理的椭圆呢?
重力迷宫小球
▲ 重力迷宫
你可以看到这个小球就像一个透明塑料小球一样,纹理会跟随背景而动。这显然不是 Win2D 中的游戏循环:CanvasAnimatedControl 一文中我用 DrawEllipse
画的那个灰色小球。
Win2D 实现
我们会使用到 Win2D 中的多种特效:
MorphologyEffect
- 用于将背景那些红色的洞洞转换成较虚的形态,以便球看起来不是扁平的。
- 不是必要的,只是为了好看而已。
CropEffect
- 将背景区域裁剪成一个较小的区域。
- 不是必要的。
AlphaMaskEffect
- 使用透明度蒙版使得图片只露出椭圆部分。
- 这是绘制椭圆必要的特效。
ShadowEffect
- 做一个小球的阴影。
- 不是必要的。
要画出图片纹理的椭圆,只需要这么一点代码即可:
using (var list = new CanvasCommandList(creator))
{
using (var s = list.CreateDrawingSession())
{
s.FillEllipse(_xPosition, _yPosition, _radius, _radius, Colors.Black);
}
var mask = new AlphaMaskEffect
{
Source = bitmap,
AlphaMask = list,
};
ds.DrawImage(mask);
}
▲ 带图片纹理的椭圆
现在,如果你希望获得本文一开始获得的那种奇妙的效果,可以添加更多的特效:
var bitmap = _game.Material.bitmap;
var morphology = new MorphologyEffect
{
Source = bitmap,
Mode = MorphologyEffectMode.Dilate,
Width = 40,
Height = 40,
};
var crop = new CropEffect
{
Source = morphology,
SourceRectangle = new Rect(
_xPosition - _radius, _yPosition - _radius,
_radius + _radius, _radius + _radius),
};
using (var list = new CanvasCommandList(creator))
{
using (var s = list.CreateDrawingSession())
{
s.FillEllipse(_xPosition, _yPosition, _radius, _radius, Colors.Black);
}
var mask = new AlphaMaskEffect
{
Source = crop,
AlphaMask = list,
};
var shadow = new ShadowEffect
{
Source = mask,
BlurAmount = 4,
ShadowColor = Color.FromArgb(0x40, 0x00, 0x00, 0x00),
};
ds.DrawImage(shadow);
ds.DrawImage(mask);
}
关于 CanvasCommandList
上面的例子中,我们是用到了 CanvasCommandList
。它可以帮助我们将绘制命令先绘制到一个缓存的上下文中,以便被其他绘制上下文进行统一的处理。
阅读林德熙的博客了解更多 CanvasCommandList
的资料:win2d CanvasCommandList 使用方法 - 林德熙。
使用 Win2D 绘制带图片纹理的圆(或椭圆)的更多相关文章
- 使用原生javaScript绘制带图片的二维码---js
使用链接生成二维码主要是使用qr.js或者其他,把链接转化为二维码的形式,在使用canvas时需要设置画布的尺寸,生成的颜色. <div class="qr_code"> ...
- CAD如何动态绘制带面积周长的圆?
CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以在控件视区点取任意一点做为圆心,再动态点取半径绘制圆. 主要用到函数说明: _DMxDrawX::DrawCircle 绘制一个圆.详细说明如下 ...
- CAD动态绘制带面积周长的圆(com接口)
CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以在控件视区点取任意一点做为圆心,再动态点取半径绘制圆. 主要用到函数说明: _DMxDrawX::DrawCircle 绘制一个圆.详细说明如下 ...
- Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框
Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框 在Android早期的开发中,如果涉及到圆形图片的处理,往往需要借助于第三方的实现,见附录文章1,2.And ...
- android绘制圆形图片的两种方式
看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把bitmap ...
- 使用MFC CImage类绘制PNG图片时遇到的问题
为了测试CImage绘制PNG图片的效果,我们用截图软件截得一张360的界面,然后使用PhotoShop等工具在图片的周边加上了透明的区域,然后保存成PNG图片文件.CImage首先从文件中加载,即 ...
- Turtle绘制带颜色和字体的图形(Python3)
转载自https://blog.csdn.net/wumenglu1018/article/details/78184930 在Python中有很多编写图形程序的方法,一个简单的启动图形化程序设计的方 ...
- Unity游戏开发图片纹理压缩方案
Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式. 在Texture2D的设置选项中,你可以针对不同的平台,设 ...
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等--绘制点、线、圆,显示提示信息
ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等--绘制点.线.圆,显示提示信息 /// <summary> /// 绘制界面上的点和线 /// ...
随机推荐
- 单台DNS服务器搭建(BIND)
一.理论层面 1. DNS的出现及演化 网络出现的早期是使用IP地址通讯的,那是就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的 ...
- js动态创建Form表单并提交
javascript动态创建Form表单和表单项,然后提交表单请求,最后删除表单,代码片段如下(Firefox测试通过): var dlform = document.createElement('f ...
- javascript数组总结
数组是一个有序的集合,javascript数组中的元素的类型可以是任意的,同一个数组不同元素之间的类型也是可以不同的.数组也是对象,有个length属性,记录数组的长度. 创建数组有两种方法: 数组直 ...
- INNODB锁(2)
在上一篇文章写了锁的基本概述以及行锁的三种形式,这一篇的主要内容如下: 一致性非锁定读 自增长与锁 外键和锁 一致性性非锁定读 一致性非锁定读是InnoDB通过多版本并发控制(MVCC,multi v ...
- INNODB索引与算法
在之前的博文中简单提到了索引的分类与索引的可选择性查看:Click HERE 这片博客主要包含内容:索引组织表,索引算法B+树简单介绍 索引组织表 在innodb存储引擎中,表都是根据主键顺序组织存放 ...
- 升级 Jenkins 从 1.56 到 2.64
今天上午小伙伴突然发现 git 的 Credential 出错了,同时页面的保存按钮也找不到.折腾了半天没有头绪,干脆升级到最新的版本吧,毕竟也很久没升级了. 从 1.x 到 2.x 有很多改动,为了 ...
- c++生成算式并计算(《构建之法》第一章课后第一题)
c++实现计算器(自动生成算式并计算) 要满足的需求有以下几个: 自动生成随机的四则运算算式,包含括号和小数. 对生成的算式计算出结果. 算式.结果分别存储到不同的文件. 一 生成算式 由上述需求可知 ...
- 2017-2018-1 Java小组-1623 第一周作业
2017-2018-1 Java小组-1623 第一周作业 <构建之法>学习笔记及团队成员介绍 1. 学习内容 概论 个人技术和流程 软件工程师的成长 两人合作 团队和流程 敏捷流程 实战 ...
- hadoop经典案例
hadoop经典案例http://blog.csdn.net/column/details/sparkhadoopdemo.html
- python 获取列表的键值对
nums = [, , , , ] for num_index, num_val in enumerate(nums): print(num_index, num_val)