在WPF中使用SkiaSharp模糊文本

时间:2017-01-25 22:28:59

标签: c# wpf skia skiasharp

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

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

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

正如您所看到的,文字并不清晰。

enter image description here

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

可能是什么问题?

2 个答案:

答案 0 :(得分:2)

很可能是你没有以足够高的分辨率渲染。我在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进行操作:

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

<views:SKElement x:Name="canvas" PaintSurface="OnPaintCanvas" />

答案 1 :(得分:1)

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