2

我正在使用 SkiaSharp 在 WPF 中绘制文本。

http://lostindetails.com/blog/post/SkiaSharp-with-Wpf

https://github.com/8/SkiaSharp-Wpf-Example

如您所见,文字不清晰。

在此处输入图像描述

通过将文本与标题中的 MainWindow 测试进行比较,您可以很容易地注意到这一点。

可能是什么问题?

4

2 回答 2

3

很有可能是您没有以足够高的分辨率进行渲染。我在 SurfaceBook 显示器上遇到了这种情况,但在我的外接显示器上没有。您实际上必须创建一个比您实际需要的“更大”的表面。比如我的SurfaceBook有300%的缩放,所以我得先得到窗口的宽度,然后乘以3:

https://github.com/mono/SkiaSharp/blob/master/source/SkiaSharp.Views/SkiaSharp.Views.WPF/SKElement.cs#L57-L61

var m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
var dpiX = m.M11;
var dpiY = m.M22;
var width = (int)(ActualWidth * dpiX);
var height = (int)(ActualHeight * dpiY);

您可以使用 NuGet 中预先创建的视图,而不必自己执行此操作:https ://www.nuget.org/packages/SkiaSharp.Views

然后,您可以SKElement在此示例中放入 as:

https://github.com/mono/SkiaSharp/blob/master/samples/WPFSample/WPFSample/MainWindow.xaml#L28

<views:SKElement x:Name="canvas" PaintSurface="OnPaintCanvas" />
于 2017-01-26T16:44:44.393 回答
1

根据我的经验,如果您真的想要 WPF 中漂亮而清晰的文本,则必须通过 SkiaSharp.HarfBuzz 使用文本整形 - 它以亚像素精度定位字母,然后使用 canvas.DrawPositionedText()。

于 2018-08-31T14:21:52.243 回答