WPF 中使用 SkiaSharp 的模糊文本
Blurry text with SkiaSharp in WPF
我正在使用 SkiaSharp 在 WPF 中绘制文本。
http://lostindetails.com/blog/post/SkiaSharp-with-Wpf
https://github.com/8/SkiaSharp-Wpf-Example
如您所见,文字不清晰。
你可以很容易地注意到,通过将文本与标题中的 MainWindow 测试进行比较,它是清晰的。
可能是什么问题?
很可能是您没有以足够高的分辨率进行渲染。我在我的 SurfaceBook 显示器上遇到过这种情况,但在我的外部显示器上没有。实际上,您必须创建一个比您实际需要的 "larger" 表面。比如我的SurfaceBook的缩放比例是300%,所以我得先得到window的宽度,然后乘以3:
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 中的 pre-created 视图,而不必自己执行此操作: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" />
根据我的经验,如果您真的想要在 WPF 中使用漂亮而清晰的文本,则必须通过 SkiaSharp.HarfBuzz 使用文本整形 - 以亚像素精度定位字母,然后使用 canvas.DrawPositionedText()。
我正在使用 SkiaSharp 在 WPF 中绘制文本。
http://lostindetails.com/blog/post/SkiaSharp-with-Wpf
https://github.com/8/SkiaSharp-Wpf-Example
如您所见,文字不清晰。
你可以很容易地注意到,通过将文本与标题中的 MainWindow 测试进行比较,它是清晰的。
可能是什么问题?
很可能是您没有以足够高的分辨率进行渲染。我在我的 SurfaceBook 显示器上遇到过这种情况,但在我的外部显示器上没有。实际上,您必须创建一个比您实际需要的 "larger" 表面。比如我的SurfaceBook的缩放比例是300%,所以我得先得到window的宽度,然后乘以3:
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 中的 pre-created 视图,而不必自己执行此操作: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" />
根据我的经验,如果您真的想要在 WPF 中使用漂亮而清晰的文本,则必须通过 SkiaSharp.HarfBuzz 使用文本整形 - 以亚像素精度定位字母,然后使用 canvas.DrawPositionedText()。