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 释放字体
WPF 解决 Skia 因为找不到字体而绘制不出中文字符的更多相关文章
- 解决Visual Studio 找不到报表控件、rdlc中文乱码
找回报表控件 运行安装程序中的 ..\packages\Reporting Services\RVAddon.msi 工具栏,右键选择ReportViewer,注意选择的版本 如果不能编辑报表文件(. ...
- Matlab字体设置中找不到字体的解决方法(转载)
Matlab字体设置中找不到字体 Matlab默认的字体实在不好看,一般都需要重新设置字体. 在其字体设置中有些字体不能同时支持中文和英文,我在之前的博客中说过,如何为Matlab设置一款好看的同时兼 ...
- 解决maltab的中文和英文字体问题,中文乱码
用比较好看的编程字体,偏偏不显示中文,用支持中文的字体,英文不是等宽的,非常难看. 最近在网上找这方面的解决方法,发现解决问题的方法还是有的. 其实这个问题的原因就是系统自带的等宽字体,不支持中文,解 ...
- Java_java动态编译整个项目,解决jar包找不到问题
java动态编译整个项目,解决jar包找不到问题原文:http://itzyx.com/index.php/javac/ 动态将java文件编译为class文件解决方案:将temp\sdl\src目录 ...
- WPF解决界面全屏化但不遮挡任务栏的问题
原文:WPF解决界面全屏化但不遮挡任务栏的问题 学习C#有一段时间了,现在跟着做项目,碰到有个客户端界面总是全屏,对于客户来说没有任务栏很不习惯,所以做了些略微的修改 </pre>&l ...
- WPF解决按钮上被透明控件遮盖时无法点击问题
原文:WPF解决按钮上被透明控件遮盖时无法点击问题 IsHitTestVisible="False" 在控件上设置如上属性即可,即可让透明控件不触发点击效果
- 转(解决GLIBC_2.x找不到的编译问题)
Linux/CentOS 升级C基本运行库CLIBC的注意事项(当想解决GLIBC_2.x找不到的编译问题) 分类: 开发环境 Linux2014-09-24 10:32 8933人阅读 评论(5) ...
- WPF 精修篇 获取系统颜色和字体样式
原文:WPF 精修篇 获取系统颜色和字体样式 看效果 <Grid> <Rectangle Fill="{DynamicResource {x:Static SystemCo ...
- Eclipse解决项目中找不到Maven Dependencies
项目中找不到Maven Dependencies 正常的Maven项目应该是这样的 自己的项目中却没有Maven Dependencies 先做第一步 若项目中还没有出现Maven Dependenc ...
- WPF 解决无边框产生的相关问题
原文:WPF 解决无边框产生的相关问题 最大化: 在设置WindowStyle="None" AllowsTransparency="True"后,最大化会覆盖 ...
随机推荐
- pandas 自动化处理Excel数据
需求: 如下一份这样的Excel数据 现在需要把学生的学号.姓名分离出来到单独的一列 ,将 测验.讨论.成绩三列转换成数值,并把讨论这列的"-"转换成 0 显示 最后把处理好的内 ...
- 怎样更直观的查看KingbaseES数据库日志
数据库日志相关参数:默认设置 log_destination = 'stderr' # Valid values are combinations of # stderr, csvlog, syslo ...
- 第一次画pcb学到的知识
第一次画pcb学到的知识 1. Typec (6针) 其中的CC1.CC2引脚为快充协议的引脚,用不到的时候串个5.1K的电阻接地s 2. AMS117降压电路 AMS1117芯片的输入电压都要一个1 ...
- #分治,决策单调性dp#CF868F Yet Another Minimization Problem
题目 给定一个序列 \(a\),要把它分成 \(k\) 个子段.(\(n\leq 10^5,k\leq 20\)) 每个子段的费用是其中相同元素的对数.求所有子段的费用之和的最小值. 分析 有一个很明 ...
- 上海站报名启动! 2023年开源产业生态大会OpenHarmony生态分论坛
作为年内开源领域不容错过的科技盛宴,2023年开源产业生态大会将于12月19日在上海盛大开幕.本次活动由上海市经济和信息化委员会.上海市科学技术协会和"科创中国"开源创新联合体 ...
- Docker学习路线5:在 Docker 中实现数据持久化
Docker 可以运行隔离的容器,包括应用程序和其依赖项,与主机操作系统分离.默认情况下,容器是临时的,这意味着容器中存储的任何数据在终止后都将丢失.为了解决这个问题并在容器生命周期内保留数据,Doc ...
- Viu联合华为HMS生态,共创影音娱乐新体验
华为HMS生态携手流媒体平台Viu,为海外消费者打造精品移动娱乐应用体验,并助力提升流量变现能力.Viu在中东非.东南亚等16个国家及地区提供广告合作和付费会员服务,支持优质视频内容高清点播和直播.自 ...
- Qt:MD5加密
#include <QCryptographicHash> QString source_value = "123456"; // 待加密原始数据 QCryptogra ...
- C++获取appdata路径
C++获取appdata路径的方式: SHGetSpecialFolderPath wchar_t buffer[MAX_PATH]; SHGetSpecialFolderPath(0, buf ...
- Web Audio API 第4章 音调与频域
音调与频域 此章中如果对音乐部分不感兴趣,可忽略 代码部分也没有更多的新 api ,重要的还是相关的物理与声音的相关知识 到目前为止我们已经学过了声音的基础属性:定时与音量.为了能处理更复杂的的情况, ...