WinUI3开发_GlowText(发光字)

什么是GlowText?

GlowText是一种外发光字体,其发光的原理是在字体下面增加一层描边(目的是为了与字的路径融洽)并使用模糊方式让其模糊也就是阴影效果,这样看起来就像字体边缘发光了一样。
下图是不发光字体与使用描边并模糊后的效果:
在这里插入图片描述

可以看到发光字明显要更加好看一点。

如何在WinUI3中实现GlowText?

在WinUI3中为我们提供了DropShadow,该API属于Composition的一种高级合成器API,可以让用户创建柔和模糊透明可控的阴影功能。
首先创建一个TextBlock

<TextBlock x:Name="GlowText" Text="Hello World!" Foreground="#FFFFFF" FontSize="14" FontWeight="SemiBold"/>

然后在代码里使用Composition功能,首先获取TextblockVisualComposition

auto textVisual = ElementCompositionPreview::GetElementVisual(GlowText());
auto compositor = textVisual.Compositor();

然后通过Compositor创建DropShadow

DropShadow shadow = compositor.CreateDropShadow();

然后我们就可以通过DropShadow来设置阴影的颜色模糊程度透明度

shadow.Color(ColorHelper::FromArgb(255, 145, 224, 188));
shadow.BlurRadius(8.0f);
shadow.Opacity(0.85f);

有了阴影的样式接下来就要设置阴影的形状,我们要给TextBlock来设置阴影,所以形状要与TextBlock一致,这里DropShadow提供了Mask(蒙版)的方法来生成与某个元素一致形状的阴影功能。
Mask要求的是一个CompositionBrush类型,如果想要获取某个元素的Mask可以通过GetAlphaMask方法,CompositionBrush实际上是一个蒙版图像,里面包含了透明度,每个像素的透明度值,用于做蒙版,它没有RGB值,只有每个像素上的透明度,取值在0~1f之间。

shadow.Mask(GlowText().GetAlphaMask()); 

那么最后就要使用SpriteVisualSetElementChildVisual来做合成了:

 SpriteVisual glow = compositor.CreateSpriteVisual();
 glow.RelativeSizeAdjustment({ 1.f, 1.f });
 glow.Shadow(shadow);
 ElementCompositionPreview::SetElementChildVisual(GlowText(), glow);

关于SpriteVisualSetElementChildVisual与蒙版相关的讲解可以参考我这篇文章:WinUI3开发_图像羽化
下图是运行效果:
在这里插入图片描述
需要注意在合成时要用Shadow,因为SpriteVisual是一种可以渲染颜色渐变图像阴影的模块,需要注意前面的mask只是数据合成,告诉SpriteVisual怎么渲染,而SpriteVisual才是真正的渲染部分,它才会去调用底层GPU去渲染图像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值