在 WPF 使用 Skia 做渲染工具,如果绘制的中文都是方块,也许是字体的问题。字体的问题是 Skia 没有找到字体,本文告诉大家如何修复
在 Skia 使用特定字体,可以使用 SkiaSharp 的 SKTypeface 方法指定
var name = "微软雅黑";
var skTypeface = SKTypeface.FromFamilyName(name);
但是如何判断 Skia 找不到字体?可以判断字体名
var name = "微软雅黑";
var skTypeface = SKTypeface.FromFamilyName(name);
if (skTypeface.FamilyName != name)
{
// 字体加载失败了
}
解决方法是通过 WPF 辅助拿到字体,请看代码
var fontFamily = new FontFamily(name);
foreach (var familyNamesValue in fontFamily.FamilyNames.Values)
{
skTypeface = SKTypeface.FromFamilyName(familyNamesValue);
if (skTypeface.FamilyName == familyNamesValue)
{
break;
}
}
上面代码存在的坑是 SKTypeface 是需要手动释放的资源,因此优化的代码如下
var name = "微软雅黑";
var skTypeface = SKTypeface.FromFamilyName(name);
if (skTypeface.FamilyName != name)
{
// 字体加载失败了
skTypeface.Dispose();
}
var fontFamily = new FontFamily(name);
foreach (var familyNamesValue in fontFamily.FamilyNames.Values)
{
skTypeface = SKTypeface.FromFamilyName(familyNamesValue);
if (skTypeface.FamilyName == familyNamesValue)
{
break;
}
else
{
skTypeface.Dispose();
}
}
需要在绘制之后调用 Dispose 释放字体
我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入
如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
我是微软Windows应用开发方向的最具价值专家,欢迎访问我博客blog.lindexi.com里面有大量WPF和UWP博客