如何解决如何使用 SkiaSharp 在透明背景上浮雕文字?
我正在使用 SkiaSharp 在我已经绘制了背景图像的画布上绘制文本。
仅绘制常规文本时效果很好,但我想为文本添加浮雕效果。为此,我尝试使用 SKImageFilter.CreateDistantLitDiffuse,它提供了正确的效果,但问题是它用浅色填充背景(也受漫射照明常数的影响)。这最终抹杀了我的背景。
下图显示了带有浮雕效果的文字,但正如您所见,它的背景不是透明的。此外,文本应该是白色的,但它的颜色已被过滤器更改。
我使用的图像过滤器是:
fontPaint.ImageFilter = SKImageFilter.CreateDistantLitDiffuse(
new SKPoint3(2,3,4),SKColors.Transparent,-3,(float)0.2)
canvas.DrawText(element.Value,coords,fontPaint);
我见过用偏移量绘制文本两次来压印的例子,但这并没有达到预期的效果。
关于如何通过在背景中填充图像过滤器来解决此问题的任何想法?
解决方法
通过使用 CreateMatrixConvolution,我设法非常接近我想要的东西。
float[] kernel = new float[25]
{
-1,-.5f,-1,1.5f,.5f,1,1
};
fontPaint.ImageFilter = SKImageFilter.CreateMatrixConvolution(
new SKSizeI(5,5),kernel,1f,new SKPointI(1,1),SKMatrixConvolutionTileMode.Clamp,true);
这给了我以下结果:
这和我想要的不完全一样,更像是这样:
但它非常接近。如果有人对我如何使其更接近上面的示例有任何建议,我很乐意听到。可能调整内核可能会奏效,但我已经花了很长时间玩变体。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。