前往我的主页以获取更好的阅读体验,并下载文中的示例代码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画笔详解相关推荐

  1. python控制画笔尺寸,Python画笔的属性及用法详解

    画笔有颜色.画线的宽度等属性. 1.turtle.pensize():设置画笔的宽度: 2.turtle.pencolor():没有参数传入返回当前画笔颜色:传入参数设置画笔颜色,可以是字符串如&qu ...

  2. Canvas(画布)、Paint(画笔) 详解

    一.自定义控件分类: 1.组合控件:将系统原生控件组合起来,加上动画效果,形成一种特殊的UI效果 2.纯粹自定义控件:继承自系统的View,自己去实现view效果 二.Canvas(画布).Paint ...

  3. Paint画笔的常用api简介、渲染器详解

    文章目录 常用api 1.setStrokeCap圆角效果 2.setStrokeJoin拐角风格 3.setFilterBitmap设置双线性过滤 4.getFontMetrics获取字体度量对象 ...

  4. VC++深入详解学习笔记

    VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesso ...

  5. procreate功能详解_转载

    登录 在 iPad 上拥有一支「万能」画笔:Procreate 画笔功能详解 DerQi 2020 年 01 月 03 日 Procreate 是目前 iPad 上表现最出色的绘图工具之一,不仅仅体现 ...

  6. 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选

    作者 | 天元浪子 来源 | CSDN博文精选 [编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Python.Java等语言都能支 ...

  7. iOS 2D绘图详解(Quartz 2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)

    前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellip ...

  8. python turtle循环图案-Python内置模块turtle绘图详解

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...

  9. 用python画太阳花-python 简单的绘图工具turtle使用详解

    目录 1. 画布(canvas) 1.1 设置画布大小 2. 画笔 2.1 画笔的状态 2.2 画笔的属性 2.3 绘图命令 3. 命令详解 4. 绘图举例 4.1 太阳花 4.2 绘制小蟒蛇 4.3 ...

最新文章

  1. 时间和邮箱的正则表达式,获取当前时间函数
  2. 360 您访问的是存在未经证实信息的网站
  3. 网页打开慢与服务器有关吗,网站打开好慢! 原来是这些原因造成的
  4. PHP实现同服务器多个二级域名共享 SESSION
  5. 关于div的outline-offset属性和focus事件的接收
  6. 为什么HashMap会产生死循环?
  7. visual studio Code配置C++环境:
  8. 抄底指标:秘密买卖点
  9. Glut 回调函数小结
  10. 复数相关的等式及证明
  11. poj 1962 Corporative Network 并查集,很容易超时,大家要注意合并
  12. AE效果:3D 通道
  13. android intent scheme,android Scheme使用 打开指定的Activity
  14. 处理器核(core)、处理器(cpu)区别
  15. Android Binder 之 ServiceManager (基于android 12.0/S)
  16. python软件下载对电脑配置要求-Python实现的读取电脑硬件信息功能示例
  17. Devops成功的八大炫酷工具
  18. V4L2视频采集与H264编码2—v4l2采集YUV数据
  19. web网页设计—— 中国餐饮协会(HTML+CSS)
  20. 计算机课程教学探讨新闻,信息学院召开《计算机程序设计》课程教学研讨会

热门文章

  1. Anchor-free系列——FoveaBox: Beyond Anchor-based Object Detector
  2. 简述数学建模的过程_数学建模的一般步骤
  3. 数据挖掘利器 selenium实战案例--论文数据挖掘与可视化分析(下)
  4. 程序员和女朋友的3种怪现象(男版)
  5. 【Python基础】Python语法入门
  6. %llu 64位无符号%d、%u、%x/%X、%o%f、%e/%E或%g/%G
  7. 三菱 FX3u-64M添加以太网FX3u-ENET-ADP模块
  8. PHP实现阿拉伯数字转中文大写
  9. 【eclipse】版本代号
  10. python 广告联盟_聚力商城的Python编程书怎么样?