zoukankan      html  css  js  c++  java
  • OxyPlot.SkiaSharp中文显示乱码的问题

    oxyplot 图表控件功能强大,使用很广泛。最近考虑到性能使用OxyPlot.SkiaSharp替代OxyPlot.WPF,曲线图表初步测试,性能提升近10倍左右。基于SkiaSharp图形引擎的一些控件常遇见中文乱码的问题,所以改用OxyPlot.SkiaSharp时也有心里准备。默认情况下中文显示真成了乱码。如下图所示。

    显示乱码

    于是翻了遍OxyPlot.SkiaSharp源码,看到PlotModel中的DefaultFont属性默认值是“Segoe UI”,西文无衬线体。试着改为“微软雅黑”,中文显示正常了。如下图所示。

    显示正常

    OxyPlot.WPF中为什么显示没问题,将WPF中TextBlock字体改为ALGERIAN后,只有英文应用了该字体,而中文则是以另外一种字体显示的。如下图所示。

    中英文分别映射

    我们知道WPF的默认字体也是“Segoe UI”,为什么显示不会有问题呢,这就要提到WPF应用字体的机制了。

    WPF应用程序使用属性FontFamily、FontStyle、FontWeight、FontStretch和FontSize来指定它想要的字体。 在运行时,WPF会决定在应用程序运行的目标系统上使用准确的字体。这个决定是基于将前四个属性(暂时忽略FontSize)与该系统上安装的物理字体文件进行匹配。

    WPF首先将提供的FontFamily与系统中找到的字体名称进行匹配。 然后,它试图找到一个与所请求的FontStretch、FontStyle和FontWeight属性值最接近的字体。 匹配FontStretch是最高优先级,其次是FontStyle,然后是FontWeight。

    如果WPF找不到匹配的字体,它就会“退回”到与WPF一起安装的默认字体,即

    C:WindowsFontsGlobalUserInterface.CompositeFont
    

    这是一种复合字体,它试图将单个字符映射到系统上可能存在的字体。也就是说中文和英文是分开映射到不同的字体上。

  • 相关阅读:
    css中margin-left与left的区别
    Python文件和目录模块介绍:glob、shutil、ConfigParser
    [ Python入门教程 ] Python文件基本操作_os模块
    使用Pyinstaller转换.py文件为.exe可执行程序
    Windows命令行打开常用界面
    如何做好性能测试_流程篇
    Windows查看指定端口是否占用和查看进程
    ‘操作无法完成 ,因为其中的文件夹或文件已在另一程序中打开’问题解决
    bat脚本基础教程
    vi编辑器常用命令
  • 原文地址:https://www.cnblogs.com/leolion/p/14633839.html
Copyright © 2011-2022 走看看