UWP Brush画笔详解
前往我的主页以获取更好的阅读体验,并下载文中的示例代码UWP Brush画笔详解 - DearXuan的主页https://blog.dearxuan.com/2021/10/08/UWP-Brush%E7%94%BB%E7%AC%94%E8%AF%A6%E8%A7%A3/
通用
画笔命名空间
Windows.UI.Xaml.Media
颜色
画笔使用Windows.UI.Color类作为颜色属性,而不是System.Drawing.Color
这是一个8位ARGB模式的颜色,A为不透明度,255为完全不透明,0为完全透明
你也可以使用Windows.UI.Colors类根据名称直接获取颜色
Color color1 = new Color() { A = 255, R = 0, G = 0, B = 255 };
Color color2 = Colors.White;
使用自定义画笔
通常控件都会有Background,Foreground等属性,这就是控件的画笔
TextBox textBox = new TextBox();
textBox.Foreground = new SolidColorBrush(Colors.White);
纯色画笔 SolidColorBrush
介绍
纯色画笔负责在绘图区绘制单一颜色,颜色采用8位ARGB色彩模式
代码
SolidColorBrush的构造函数包含一个Color对象,Color定义的颜色即Brush的颜色
public Brush 纯色画笔()
{//定义ColorColor color = new Color() { A = 255, R = 0, G = 0, B = 255 };SolidColorBrush brush = new SolidColorBrush(color);return brush;
}
警告: 不要把Windows.UI.Color定义成System.Drawing.Color
效果
线性渐变画笔 LinearGradientBrush
介绍
渐变画笔用于绘制渐变图案,渐变方向用渐变向量描述,每个渐变点称为梯度点
代码
使用LinearGradientBrush来初始化一个画笔实例,并为它设置起始点和终点
LinearGradientBrush brush = new LinearGradientBrush();
brush.StartPoint = new Point(0, 0);
brush.EndPoint = new Point(1, 1);
其中(0,0)是左上角,(1,1)是右下角。从StartPoint指向EndPoint的向量称为渐变向量。分别过起点和终点作渐变向量所在直线的垂线,中间的区域即为有效区,外面为无效区。将起点和终点设为(0,0),(1,1)表示整个绘图区域都是有效区。如果终点坐标大于1,则部分图像会被绘制到窗口外面,因此终点的坐标通常小于等于1
修改渐变向量可以达到修改渐变方向的效果
其中无效区并不是说不会被绘制,而是不会出现渐变效果,它的颜色会分别和渐变向量在的起点和终点处的颜色相同。
定义梯度点
GradientStop gradientStop1 = new GradientStop();
GradientStop gradientStop2 = new GradientStop();
gradientStop1.Color = Color.FromArgb(255, 0, 0, 0);
gradientStop1.Offset = 0;
gradientStop2.Color = Color.FromArgb(255, 255, 255, 255);
gradientStop2.Offset = 1;
梯度点决定了渐变向量某一点处的颜色。
Color为梯度点的颜色,Offset为梯度点相对于渐变向量的偏移,0表示起点,1表示终点,0.5表示中点。如果偏移大于1,那么梯度点就会被定位到无效区,此时计算机仍旧按照这个位置来计算渐变颜色,但是超出有效区的部分不会被绘制。
完整代码
public Brush 线性渐变画笔()
{//定义线性渐变画笔LinearGradientBrush brush = new LinearGradientBrush();//定义梯度点GradientStop gradientStop1 = new GradientStop();GradientStop gradientStop2 = new GradientStop();//设置梯度点颜色和偏移gradientStop1.Color = Color.FromArgb(255, 0, 0, 0);gradientStop1.Offset = 0;gradientStop2.Color = Color.FromArgb(255, 255, 255, 255);gradientStop2.Offset = 1;//添加梯度点brush.GradientStops.Add(gradientStop1);brush.GradientStops.Add(gradientStop2);//设置起始点和终点brush.StartPoint = new Point(0, 0);brush.EndPoint = new Point(1, 1);return brush;
}
上面的代码中设置了起点和终点的颜色,分别为黑色和白色,而中间部分的颜色会由程序自动计算填充。下图是上面代码的效果
通过添加多个梯度点可以实现多种颜色的渐变效果
public Brush 线性渐变画笔()
{//定义线性渐变画笔LinearGradientBrush brush = new LinearGradientBrush();//定义梯度点GradientStop gradientStop1 = new GradientStop();GradientStop gradientStop2 = new GradientStop();GradientStop gradientStop3 = new GradientStop();//设置梯度点颜色和偏移gradientStop1.Color = Colors.Black;gradientStop1.Offset = 0;gradientStop2.Color = Colors.White;gradientStop2.Offset = 0.3;gradientStop3.Color = Colors.Red;gradientStop3.Offset = 1;//添加梯度点brush.GradientStops.Add(gradientStop1);brush.GradientStops.Add(gradientStop2);brush.GradientStops.Add(gradientStop3);//设置起始点和终点brush.StartPoint = new Point(0, 0);brush.EndPoint = new Point(1, 0);return brush;
}
定位方式
上面的介绍都是基于相对位置的,(1,1)表示绘图区的右下角。如果希望颜色不随控件大小改变而拉伸,需要把画笔定位方式修改为绝对位置
brush.MappingMode = BrushMappingMode.Absolute; // 绝对坐标
//brush.MappingMode = BrushMappingMode.RelativeToBoundingBox; // 相对坐标
但此时终点坐标就不能写成(1,1)了,而是要改成具体数字
brush.EndPoint = new Point(500, 0);
平铺画笔 ImageBrush
介绍
平铺画笔可以加载一张图片作为绘制内容
代码
public Brush 平铺画笔()
{//定义平铺画笔ImageBrush brush = new ImageBrush();//加载图片brush.ImageSource = new BitmapImage(new Uri("ms-appx:///Assets/1.jpg"));//设置图片在保留纵横比的同时适应控件大小brush.Stretch = Stretch.Uniform;return brush;
}
效果
亚克力画笔
介绍
亚克力画笔提供了更简洁,更美观的绘图方案,它通过模糊背景的方法,来实现半透明效果
代码
定义亚克力画笔
AcrylicBrush brush = new AcrylicBrush();
选择画笔的背景采样源,你可以指定控件或应用窗口来作为源
brush.BackgroundSource = AcrylicBackgroundSource.HostBackdrop; // 从窗口后面采样
brush.BackgroundSource = AcrylicBackgroundSource.Backdrop; // 从控件中采样
如果以控件作为采样源,那么你可以透过使用了亚克力画笔的控件,隐约看见下面的控件
如果以应用窗口作为采样源,那么你可以透过该控件,隐约看到桌面壁纸
修改覆盖层的颜色和不透明度来达到更美观的效果
//不透明度为0.5
brush.TintOpacity = 0.5;
//覆盖层颜色
brush.TintColor = Color.FromArgb(255, 64, 158, 254);
这里需要注意: 覆盖层的颜色不透明度和覆盖层的不透明度只需要设置一个,如果两个都是半透明,最后的效果将会叠加。
UWP Brush画笔详解相关推荐
- python控制画笔尺寸,Python画笔的属性及用法详解
画笔有颜色.画线的宽度等属性. 1.turtle.pensize():设置画笔的宽度: 2.turtle.pencolor():没有参数传入返回当前画笔颜色:传入参数设置画笔颜色,可以是字符串如&qu ...
- Canvas(画布)、Paint(画笔) 详解
一.自定义控件分类: 1.组合控件:将系统原生控件组合起来,加上动画效果,形成一种特殊的UI效果 2.纯粹自定义控件:继承自系统的View,自己去实现view效果 二.Canvas(画布).Paint ...
- Paint画笔的常用api简介、渲染器详解
文章目录 常用api 1.setStrokeCap圆角效果 2.setStrokeJoin拐角风格 3.setFilterBitmap设置双线性过滤 4.getFontMetrics获取字体度量对象 ...
- VC++深入详解学习笔记
VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesso ...
- procreate功能详解_转载
登录 在 iPad 上拥有一支「万能」画笔:Procreate 画笔功能详解 DerQi 2020 年 01 月 03 日 Procreate 是目前 iPad 上表现最出色的绘图工具之一,不仅仅体现 ...
- 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
作者 | 天元浪子 来源 | CSDN博文精选 [编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Python.Java等语言都能支 ...
- iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...
- python turtle循环图案-Python内置模块turtle绘图详解
urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...
- 用python画太阳花-python 简单的绘图工具turtle使用详解
目录 1. 画布(canvas) 1.1 设置画布大小 2. 画笔 2.1 画笔的状态 2.2 画笔的属性 2.3 绘图命令 3. 命令详解 4. 绘图举例 4.1 太阳花 4.2 绘制小蟒蛇 4.3 ...
最新文章
- 时间和邮箱的正则表达式,获取当前时间函数
- 360 您访问的是存在未经证实信息的网站
- 网页打开慢与服务器有关吗,网站打开好慢! 原来是这些原因造成的
- PHP实现同服务器多个二级域名共享 SESSION
- 关于div的outline-offset属性和focus事件的接收
- 为什么HashMap会产生死循环?
- visual studio Code配置C++环境:
- 抄底指标:秘密买卖点
- Glut 回调函数小结
- 复数相关的等式及证明
- poj 1962 Corporative Network 并查集,很容易超时,大家要注意合并
- AE效果:3D 通道
- android intent scheme,android Scheme使用 打开指定的Activity
- 处理器核(core)、处理器(cpu)区别
- Android Binder 之 ServiceManager (基于android 12.0/S)
- python软件下载对电脑配置要求-Python实现的读取电脑硬件信息功能示例
- Devops成功的八大炫酷工具
- V4L2视频采集与H264编码2—v4l2采集YUV数据
- web网页设计—— 中国餐饮协会(HTML+CSS)
- 计算机课程教学探讨新闻,信息学院召开《计算机程序设计》课程教学研讨会
热门文章
- Anchor-free系列——FoveaBox: Beyond Anchor-based Object Detector
- 简述数学建模的过程_数学建模的一般步骤
- 数据挖掘利器 selenium实战案例--论文数据挖掘与可视化分析(下)
- 程序员和女朋友的3种怪现象(男版)
- 【Python基础】Python语法入门
- %llu 64位无符号%d、%u、%x/%X、%o%f、%e/%E或%g/%G
- 三菱 FX3u-64M添加以太网FX3u-ENET-ADP模块
- PHP实现阿拉伯数字转中文大写
- 【eclipse】版本代号
- python 广告联盟_聚力商城的Python编程书怎么样?