阅读 109

WPF 解决 Skia 因为找不到字体而绘制不出中文字符

在 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://www.cnblogs.com/lindexi/p/13656996.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐