0

我正在使用 SkiaSharp 将文本绘制到已绘制背景图像的画布上。

仅绘制常规文本时效果很好,但我想为文本添加浮雕效果。为此,我尝试使用 SKImageFilter.CreateDistantLitDiffuse,它给出了正确的效果,但问题是它用浅色填充背景(也受漫反射光照常数的影响)。这最终抹去了我的背景。

下图显示了带有浮雕效果的文字,但正如您所见,它的背景不是透明的。此外,文本应该是白色的,但它的颜色已被过滤器更改。

在此处输入图像描述

我使用的图像过滤器是:

fontPaint.ImageFilter = SKImageFilter.CreateDistantLitDiffuse(
                                    new SKPoint3(2, 3, 4),
                                    SKColors.Transparent,
                                    -3,
                                    (float)0.2)

canvas.DrawText(element.Value, coords, fontPaint);

我已经看到了通过使用偏移量绘制文本两次来进行浮雕的示例,但这并没有达到预期的效果。

关于如何通过填充背景的图像过滤器来解决这个问题的任何想法?

4

1 回答 1

0

通过使用 CreateMatrixConvolution,我设法非常接近我想要的。

 float[] kernel = new float[25]
                {
                    -1,  0, -.5f,  0,  0,
                     0, -1, -.5f,  0,  0,
                    -.5f, -.5f,  1.5f,  .5f,  .5f,
                     0,  0,  .5f,  1,  0,
                     0,  0,  .5f,  0 , 1
                };

                
 fontPaint.ImageFilter = SKImageFilter.CreateMatrixConvolution(
               new SKSizeI(5,5), kernel, 1f, 1f, new SKPointI(1, 1), 
               SKMatrixConvolutionTileMode.Clamp, true);

这给了我以下结果:

在此处输入图像描述

它与我想要的不完全相同,更像是这样:

在此处输入图像描述

但它非常接近。如果有人对我如何使其更接近上面的示例有任何建议,我很想听听。可能调整内核可能会奏效,但我已经花了很长时间玩各种变化。

于 2021-07-19T07:14:02.010 回答