本文内容

  1. 先决条件
  2. 使用不透明蒙板创建视觉效果
  3. 创建不透明蒙板
  4. 将渐变用作不透明蒙板

显示另外 4 个

不透明蒙板能够使部分元素或视觉对象透明或部分透明。 要创建不透明蒙版,请将 Brush 应用于元素或 Visual 的 OpacityMask 属性。 画笔映射到元素或视觉对象,并且画笔的每个像素的不透明度值用于确定生成的元素或视觉对象的每个相应像素的不透明度。

先决条件

本概述假定用户熟悉 Brush 对象。 有关使用画笔的介绍,请参阅使用纯色和渐变进行绘制概述。 有关 ImageBrush 和 DrawingBrush 的信息,请参阅使用图像、绘图和视觉对象进行绘制

使用不透明蒙板创建视觉效果

不透明蒙板的工作原理是将其内容映射到元素或视觉对象。 画笔像素的 alpha 通道则用于确定生成的元素或视觉对象相应像素的不透明度;将忽略画笔的实际颜色。 如果画笔的指定部分是透明的,则元素或视觉对象的相应部分将变为透明。 如果画笔的指定部分是不透明的,则元素或视觉对象的相应部分未改变。 不透明蒙板指定的不透明度与元素或视觉对象呈现的任何不透明度设置相结合。 例如:如果某个元素的不透明度是 25% 并且从完全不透明过渡完全透明时应用不透明蒙板,结果是元素从 25% 的不透明过渡到完全透明。

备注

虽然此概述中的示例只演示了不透明蒙板在图像元素上的应用,但是,不透明蒙板可以应用到任何元素或 Visual,包括面板和控件。

不透明蒙板用于创建有趣的视觉效果,如创建从视图淡入淡出的图像或按钮、向元素添加纹理或结合渐变产生玻璃般的图面。 以下图示演示了不透明蒙板的使用。 棋盘格的背景用于显示蒙板的透明部分。


不透明蒙板示例

创建不透明蒙板

要创建不透明蒙版,请创建 Brush 并将其应用于元素或视觉对象的 OpacityMask 属性。 可以使用任何类型的 Brush 作为不透明蒙版。

  • LinearGradientBrushRadialGradientBrush:用于使元素或视觉对象从视图中淡出。

    下面的图像显示了用作不透明蒙板的 LinearGradientBrush


    LinearGradientBrush 不透明蒙板示例

  • ImageBrush:用于创建纹理和软或撕裂边缘效果。

    下面的图像显示了用作不透明蒙板的 ImageBrush


    LinearGradientBrush 不透明蒙板示例

  • DrawingBrush:用于从形状、图像和渐变的模式创建复杂的不透明蒙板。

    下面的图像显示了用作不透明蒙板的 DrawingBrush


    DrawingBrush 不透明蒙板示例

渐变画笔(LinearGradientBrush 和 RadialGradientBrush)特别适合用作不透明蒙板。 因为 SolidColorBrush 用统一颜色填充区域,不透明蒙板效果差;使用 SolidColorBrush 等效于设置元素或视觉对象的 Opacity 属性。

将渐变用作不透明蒙板

要创建渐变填充,请指定两个或多个梯度停止点。 每个渐变停止点包含描述一种颜色和位置(请参阅使用纯色和渐变进行绘制概述了解关于创建和使用渐变的更多信息)。 将渐变用作不透明蒙板时,除非不使用混合颜色,由不透明蒙板渐变混合 alpha 通道值,否则过程相同。 因此,渐变内容的实际颜色并不重要;只有 alpha 通道或每种颜色的不透明度很重要。 下面是一个示例。

XAML复制

 
<!--With the opacity mask:-->
<Image
Width="200" Height="150"
Source="sampleImages\Waterlilies.jpg"
Margin="10"
HorizontalAlignment="Left"
Grid.Column="2" Grid.Row="3">
<Image.OpacityMask>
<LinearGradientBrush StartPoint="0.1,0.1" EndPoint="0.75,0.75">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0" Color="Black"/>
<GradientStop Offset="1" Color="Transparent"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Image.OpacityMask>
</Image>

为不透明蒙板指定梯度停止点

在前面的示例中,系统定义的颜色 Black 用作渐变的开始颜色。 因为除 Transparent 之外,Colors 类中的所有颜色都为完全不透明,可使用它们为渐变不透明蒙板简单定义开始颜色。

若要在定义不透明蒙板时附加控制 Alpha 值,可使用标记中的 ARGB 十六进制表示法或 Color.FromScRgb 方法指定颜色的 alpha 通道。

在“XAML”中指定颜色不透明度

在 Extensible Application Markup Language (XAML) 中,使用 ARGB 十六进制表示法指定各个颜色的不透明度。 ARGB 十六进制表示法使用下面的语法:

#aarrggbb

上一行中的 aa 表示用于指定颜色不透明度的两位十六进制值。 rrgg 和 bb 分别表示用于指定颜色中的红色、绿色和蓝色量的两位十六进制值。 每个十六进制数字介于 0-9 或 A-F 之间。 0 是最小值,F 是最大值。 00 的 alpha 值指定完全透明的颜色,而 FF 的 alpha 值创建完全不透明的颜色。 在下面的示例中,十六进制 ARGB 表示法用于指定两种颜色。 第一种为完全不透明色,第二种为完全透明色。

XAML复制

 
<Canvas.OpacityMask>
<RadialGradientBrush>
<RadialGradientBrush.GradientStops>
<GradientStop Offset="0" Color="#FF000000"/>
<GradientStop Offset="1" Color="#00000000"/>
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</Canvas.OpacityMask>

将图像用作不透明蒙板

图像也可以用作不透明蒙板。 下图显示了一个示例。 棋盘格的背景用于显示蒙板的透明部分。


不透明蒙板示例

要将图像用作不透明蒙板,请使用 ImageBrush 包含图像。 创建要用作不透明蒙板的图像时,以支持多级别不透明度的格式保存图像,例如可移植网络图形格式 (PNG)。 下面的示例显示了用于创建上图的代码。

XAML复制

 
<!-- With the Opacity Mask-->
<Image
Height="150"
Width="200"
Source="sampleImages/Waterlilies.jpg"
HorizontalAlignment="Left"
Margin="10"
Grid.Column="2" Grid.Row="1">
<Image.OpacityMask>
<ImageBrush ImageSource="sampleImages/tornedges.png"/>
</Image.OpacityMask>
</Image>

将平铺图像用作不透明蒙板

在下面的示例中,同一图像与另一 ImageBrush 一起使用,但是画笔的平铺功能用于生成 50 像素正方形的图像平铺。

XAML复制

 
<!-- With the Opacity Mask -->
<Image
Height="150"
Width="200"
Source="sampleImages/Waterlilies.jpg"
HorizontalAlignment="Left"
Margin="10"
Grid.Column="2" Grid.Row="2"> <Image.OpacityMask>
<ImageBrush
Viewport="0,0,50,50"
ViewportUnits="Absolute"
TileMode="Tile"
ImageSource="sampleImages/tornedges.png"/>
</Image.OpacityMask>
</Image>

通过图形创建不透明蒙板

图形可用作不透明蒙板。 图形中包含的形状可使用渐变、纯色、图像或甚至其他图形来填充它们自己。 下面的图像显示了图形用作不透明蒙板的示例。 棋盘格的背景用于显示蒙板的透明部分。


DrawingBrush 不透明蒙板示例

要将绘图用作不透明蒙板,请使用 DrawingBrush 包含绘图。 下面的示例显示了用于创建上图的代码:

XAML复制

 
<!-- With the Opacity Mask-->
<Image
Grid.Row="4" Grid.Column="5"
Height="150"
Width="200"
Source="sampleImages/Waterlilies.jpg">
<Image.OpacityMask>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing>
<GeometryDrawing.Brush>
<RadialGradientBrush>
<RadialGradientBrush.GradientStops>
<GradientStop Offset="0" Color="Black" />
<GradientStop Offset="1" Color="Transparent" />
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0.05,0.05 0.9,0.9" />
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Image.OpacityMask>
</Image>

将平铺图形用作不透明蒙板

与 ImageBrush 一样,DrawingBrush 可以平铺其绘图。 在下面的示例中,图形画笔用于创建平铺的不透明蒙板。

XAML复制

 
<!-- With the Opacity Mask-->
<Button
Grid.Row="8" Grid.Column="5"
Height="100"
Width="200"
FontFamily="MS Gothic"
FontSize="16">
A Button
<Button.OpacityMask>
<DrawingBrush Viewport="0,0,0.25,0.25" TileMode="Tile">
<DrawingBrush.Drawing>
<GeometryDrawing>
<GeometryDrawing.Brush>
<RadialGradientBrush>
<RadialGradientBrush.GradientStops>
<GradientStop Offset="0" Color="Black" />
<GradientStop Offset="1" Color="Transparent" />
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0.05,0.05 0.9,0.9" />
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Button.OpacityMask>
</Button>

另请参阅

WPF 不透明蒙板概述的更多相关文章

  1. WPF通过不透明蒙板切割显示子控件

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/Backspace110/article/ ...

  2. WPF 用Clip属性实现蒙板特效

    原文:WPF 用Clip属性实现蒙板特效 上一篇,已简单介绍Clip属性的用法,这一篇用它来实现简单蒙板功能,很简单,直接上代码 <Window x:Class="擦除效果.MainW ...

  3. WPF弹出带蒙板的消息框

    效果图 思路 拿到父级窗体的内容,放入一个容器里,再在容器里放入一个半透明层.将整个容器赋给父级窗体的内容. 关闭时反向操作. 代码 消息窗弹出时 /// <summary> /// 弹出 ...

  4. WPF蒙板弹窗

    由于界面设计需要,要给弹窗添加蒙板效果,在百度和google搜索了半天,竟然没有一个满意的方案,最后只能自己想办法实现了一个,原理还是比较简单的,现在分享给大家. 先看一下效果..      原理其实 ...

  5. SVG 2D入门9 - 蒙板

    SVG支持的蒙板 SVG支持多种蒙板特效,使用这些特性,我们可以做出很多很炫的效果.至于中文中把mask叫做"蒙板"还是"遮罩"就不去区分了,这里都叫做蒙板吧. ...

  6. NeHe OpenGL教程 第二十课:蒙板

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. 利用 js 实现弹出蒙板(model)功能

    关于 js 实现一个简单的蒙板功能(model) 思路: 创建一个蒙板, 设置蒙板的堆叠顺序保证能将其它元素盖住 position: absolute; top: 0; left: 0; displa ...

  8. CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板。

    CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板. CLIP PATH (MASK) GENERATO ...

  9. cocos2d-x之蒙板,局部高亮可点,CCRenderTexture

    转自:http://www.2cto.com/kf/201207/144656.html 蒙板,局部高亮可点的用处大多是在新手引导的时候,引导玩家一步一步的走游戏的操作流程. 之前写了一个cocos2 ...

  10. Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现

    Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现 暂时还未有时间开发这效果,所以先贴出来. 先贴一张效果图,这是一张手机截屏: 左上方的风景图:背景图片 右上方的人物图:前景图 ...

随机推荐

  1. 基于eTS高效开发HarmonyOS课程类应用

    原文:https://mp.weixin.qq.com/s/kU76kB6T1JSqapAfGPGRHQ,点击链接查看更多技术内容. 随着HarmonyOS 3.0 Beta版的发布,API Vers ...

  2. 草之王qsnctfwp

    文件内容(举例): 林间小路旁有一条小溪 草之王许下三个诺言 无人知晓神诏背后的真相 草之王许下三个诺言 === 林间小路旁有一条小溪 草之王许下三个诺言 林间小路旁有一条小溪 无人知晓神诏背后的真相 ...

  3. mmdetection训练voc数据集

    首先需要准备好数据集,这里有xml标签数据转voc数据集格式的说明以及免费分享的数据集:xml转voc数据集 - 一届书生 - 博客园 (cnblogs.com) 1. 准备工作目录 我们的工作目录, ...

  4. Pytorch-均方差损失函数和交叉熵损失函数

    均方差损失函数mse_loss()与交叉熵损失函数cross_entropy() 1.均方差损失函数mse_loss() 均方差损失函数是预测数据和原始数据对应点误差的平方和的均值. \[MSE=\f ...

  5. 如何解决python安装mysqlclient失败问题

    在使用Django等框架来操作MySQL时,实际上底层还是通过Python来操作的,首先需要安装一个驱动程序,在Python3中,驱动程序有多种选择,比如有pymysql以及mysqlclient等. ...

  6. 【oracle】想要得到一个与输入顺序相同的结果

    [oracle]想要得到一个与输入顺序相同的结果 在Oracle中,输出结果顺序好像是个rowid相同的,也就是经常使用的rownum序列的值,所以可以通过对rownum进行order by来让输出结 ...

  7. Alibaba/IOC-golang 正式开源 ——打造服务于go开发者的IOC框架

    简介: IOC(inversion of control)即控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.IOC-golang 是一款服务于Go语言开发者的依赖注入框架 ...

  8. 使用Databricks+Mlflow进行机器学习模型的训练和部署【Databricks 数据洞察公开课】

    简介: 介绍如何使用Databricks和MLflow搭建机器学习生命周期管理平台,实现从数据准备.模型训练.参数和性能指标追踪.以及模型部署的全流程. 作者:李锦桂   阿里云开源大数据平台开发工程 ...

  9. CPU静默数据错误:存储系统数据不丢不错的设计思考

    简介: 对于数据存储系统来说,保障数据不丢不错是底线,也是数据存储系统最难的部分.据统计,丢失数据中心10天的企业,93%会在1年内破产.那么如果想要做到数据不丢不错,我们可以采取怎样的措施呢? 作者 ...

  10. ASP.NET CORE 发布时不编译Views文件夹

    .net core 3.0正式版已经发布,目前整体相对来说已经稳定了,可以进行生产开发. 发布时默认情况下Views是直接编译成DLL文件(XXXXXX.Views.dll),日常开发维护过程中,经常 ...