本文内容

  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. HDC2021技术分论坛:酷炫3D效果在瘦设备上也能实现?

    作者:zhuhuanhuan,图形技术专家 随着3D技术的应用普及,越来越多的场景都能看到3D的身影,比如充电动效.3D壁纸.游戏等等,给用户带来了更有趣.更丰富的体验.要满足用户的3D体验需求,离不 ...

  2. 重新点亮linux 命令树————守护进程[二十三]

    前言 简单整理一下守护进程. 正文 守护进程一般是开机启动的. 使用nohup 与 & 符号配合运行一个命令 nohup命令使进程忽略hangup(挂起)信号 使用tail 查看log文件. ...

  3. 重新整理 mysql 基础篇—————表锁和全局锁[六]

    前言 锁从大的方面可以分为: 1.全局锁 2.表锁 3.行锁 正文 全局锁 全局锁就是对整个数据加上读锁. 在mysql 中,加入全局锁的命令就是: Flush tables with read lo ...

  4. jenkins 持续集成和交付——安装与账户安全还有凭证(二)

    前言 jenkins 整理完毕,共二十四章,逐步放出,互相交流学习.学会jenkins 只是第一步,真正的还是多写脚本,然后遇到构建过程的坑,然后解决. 正文 安装jenkins 首先是如何安装jen ...

  5. ABP -Vnext框架一步一步入门落地教程——使用ABP -Vnext创建一个WEBAPI接口(二)

    开发主题:何谓开发应用服务端 在官方开发教程这一段的内容叫做开发应用服务端,作为现在前后端分离的开发模式来说,一个应用就分为前端页面框架和后端API,页面框架调用WEBAPI实现业务就完事了.所以咱们 ...

  6. ImageJ软件使用教程(三):目标计数

    目录 多点工具法 阀值分割法 二值化 填充分割 自动计数 显示结果 总结 参考资料 本文以钢筋计数为例,讲解一下如何使用ImageJ软件进行计数,这里只介绍两种方法: 多点工具法 阀值分割法 钢筋计数 ...

  7. 本地使用ts配置

    1.需要安装的依赖 "dependencies": { "html-webpack-plugin": "^5.5.0", "ts- ...

  8. Maxcompute-UNION数据类型对齐的方法

    简介: 怎么对齐两段union脚本的数据类型 第1章      问题概述 1.1     UNION中隐式类型转换问题 近期参与的一个私有云项目要升级,因为maxcompute要升级到更新的版本,对之 ...

  9. DataFunTalk:阿里建设一站式实时数仓的经验分享

    简介: 本文内容整理于阿里资深技术专家姜伟华在DataFunTalk上的演讲,为大家介绍阿里巴巴基于一站式实时数仓Hologres建设实时数仓的经验和解决方案. 导读:大数据计算正从规模化走向实时化, ...

  10. [FAQ] 对于 Puppeteer 和 Chromium 在 Linux 上的安装,需要安装哪些依赖库

      比如 puppeteer/chrome/linux-114.0.5735.133/chrome-linux64/chrome 到底要装哪些依赖. 一般根据报错提示,安装缺少的即可,以下是一般需要的 ...