zoukankan      html  css  js  c++  java
  • 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 释放字体

  • 相关阅读:
    startActivityForResult()的用法(转)
    计算机的特点
    Pinyin4j的基本用法
    简述Asp.net中断点续传的原理与实现
    ACE自适配通信环境简介
    如何将sql查询结果(不止一项)插入到一张表中
    CShell简介
    解析自定义时间格式字符串
    彻底删除IE核心浏览器的右键菜单残留项
    ACE线程管理机制
  • 原文地址:https://www.cnblogs.com/lindexi/p/13656996.html
Copyright © 2011-2022 走看看