偶遇需要自己解析 TTF 字体并显示,此做。。。

using System;
using System.Collections.Generic;
using System.Drawing.Text;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;namespace Helper.JilyData
{public class TTFInfo{public FileInfo TTFFileInfo { get; private set; }private GlyphTypeface GlyphTypeface { get; set; }public Size Bounds { get; private set; }public string ErrorMessage { get; private set; }public TTFInfo(string file){this.TTFFileInfo = new FileInfo(file);this.GlyphTypeface = new GlyphTypeface(new Uri(file, UriKind.Absolute));}public TTFInfo(FontFamily fontFamily, FontStyle fontStyle, FontWeight fontWeight, FontStretch fontStretch){this.TTFFileInfo = null;Typeface typeface = new Typeface(fontFamily, fontStyle, fontWeight, fontStretch);GlyphTypeface glyphTypeface = null;if (typeface.TryGetGlyphTypeface(out glyphTypeface)){this.GlyphTypeface = glyphTypeface;}if (this.GlyphTypeface == null){var missfont = Application.Current.MainWindow.FontFamily;typeface = new Typeface(missfont, fontStyle, fontWeight, fontStretch);if (typeface.TryGetGlyphTypeface(out glyphTypeface)){this.GlyphTypeface = glyphTypeface;}this.ErrorMessage = "当前系统无此字体";}}public ImageSource GetStrImage(string str, double fontsize, Brush foreBrush = null){if (str != null){var strs = ConverterText(str);if (str.Length > 0 && this.GlyphTypeface != null){DrawingGroup dg = new DrawingGroup();double width = 1;double height = 1;foreach (var text in strs){var glyphIndexes = new ushort[text.Length];var advanceWidths = new double[text.Length];for (int n = 0; n < text.Length; n++){var glyphIndex = this.GlyphTypeface.CharacterToGlyphMap[text[n]];glyphIndexes[n] = glyphIndex;advanceWidths[n] = this.GlyphTypeface.AdvanceWidths[glyphIndex] * 1.0;}var gr = new GlyphRun(this.GlyphTypeface, 0, false, 1.0, glyphIndexes, new Point(0, 0), advanceWidths, null, null, null, null, null, null);var glyphRunDrawing = new GlyphRunDrawing(foreBrush ?? Brushes.White, gr);var w = glyphRunDrawing.Bounds.Width * fontsize;var h = glyphRunDrawing.Bounds.Height * fontsize;ImageDrawing dring = new ImageDrawing(new DrawingImage(glyphRunDrawing), new Rect(new Point(0, height), new Size(w, h)));dg.Children.Add(dring);width += w;height += h;}Bounds = new Size(width, height);return new DrawingImage(dg);}}return null;}public List<string> ConverterText(string text){var t = text.Replace("&amp;", "&");t = t.Replace("\t", "   ");return t.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList();}}
}

View Code

转载于:https://www.cnblogs.com/jiailiuyan/p/4838478.html

WPF解析TTF 字体相关推荐

  1. java 解析ttf字体文件

    要了解ttf字体文件的原理更方便对代码的理解 package com.maoyan.movie.ttf.encode;public class PostTableHeader {public long ...

  2. ttf文件 python 打开_[译]JS解析TTF字体文件

    把字体拖到下边的方框,获取其中的奥妙!点此获取示例ttf字体文件. TTF文件拖到这里 在这篇文章,我们计划操作如下: 将字体文件拖入网页,并读取之 尽管ttf文件是为C语言读取设计的,但我们仍试图解 ...

  3. stb_truetype解析ttf字体获取顶点信息

    简介: TTF(TrueTypeFont)是一种字库名称.TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,同时也是最常用的一种字体文件表示方式.Tru ...

  4. C#WPF 使用.ttf字体文件设置font相关以及查看使用系统自带矢量图标

    关键:查看.ttf文件里面附带的矢量图标 首先,如果没有矢量图标可以自行百度矢量图标或者矢量图标库自己找寻,文件格式一般为.ttf结尾的文件. 这里展示一种添加系统里面自带的字体格式的文件到项目中并且 ...

  5. LVGL学习之路——基于lv_lib_freetype库的TTF字体文件动态加载中文字体(阿里普惠字体)

    前言   在学习lvgl中,在英文字体上很多人都用过,但是中文字体往往需要靠取模去实现.那么我就在想,如何像windows那样加载动态的字体呢,这样想做多大字体都行.于是就开始了字体的移植. 什么是t ...

  6. WPF使用外部字体文件(.ttf/.otf)

    WPF使用外部字体文件(.ttf/.otf) 1.字体文件(.ttf或者otf)导入到项目中,以.otf文件为例 2.设置文件属性为Resource,不复制 Net 5以上(包括net core)项目 ...

  7. 【WPF】添加自定义字体

    需求:在WPF项目中使用幼圆字体. 步骤: 1.首先要有幼圆TTF字体文件.在C:\Windows\Fonts目录下找,如果系统字体库中没有,就上网下一份,如这里或这里. 2.将字体文件复制到WPF项 ...

  8. ttf字体取点阵字模

    ttf是矢量字体,freetype2可以解析并操作ttf格式字体,利用它可实现ttf字体提取点阵字模c源代码文件及头文件.软件界面如下: 字框为假象字符边框尺寸,字符尺寸为实际字符尺寸,通常一致即可, ...

  9. linux提取ttf字体轮廓,[TTF字体]提取TTF字体的轮廓(二)

    一. TTF字体轮廓解析与绘制 1.1 数据提取 void CHYTTFCharacter::InitTTPOLY() { if(0 == m_pTTPOLYData)// GetGlyphOutli ...

最新文章

  1. java中实现选择文件_Java 实现文件选择对话框及功能
  2. Swift中一个类中的枚举(enum)类型的数据该如何实现序列化(NSCoder)
  3. Android程序label居中
  4. dma访问主存时_STM32F103单片机(五)——DMA
  5. 【机器学习】深度盘点:详细介绍 Python 中的 7 种交叉验证方法!
  6. 聊一聊大学做过的 7 种兼职以及收获感悟。
  7. 安卓手机网页 字体垂直方向对齐_初学Excel办公软件字体对齐调整
  8. 可以接收数量不定的参数的函数
  9. 中车四方时速600公里高速磁浮试验样车试跑成功
  10. utilities(C++)——单例(Singleton) (使用智能指针 shared_ptr)
  11. 【数据结构(C语言)】数据结构-内部排序
  12. 利用二层端口安全防止两个三层交换机长距离光纤线路被乱接测试
  13. oppo手机android功能,向日葵Android客户端保持在线设置(OPPO手机篇)
  14. Halcon开发环境和数据结构介绍——第1讲
  15. 关于airdroid免root操作
  16. 塑料壳上下扣合的卡扣设计_读书笔记-塑胶外壳卡扣设计
  17. react 路由重定向_如何测试与测试库的路由器重定向React
  18. BNUOJ 51277 魔方复原(模拟、置换)
  19. 【Android,Kotlin】No type arguments expected for class Call
  20. 提高bp神经网络预测精度,bp神经网络收敛速度慢

热门文章

  1. T-SQL笔记3:事务、锁定和并发
  2. uploadhandler.php,WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞
  3. aws 认证_引入#AWSCertified挑战:您的第一个AWS认证之路
  4. (C++)用指针实现两数交换函数swap()的两种方法
  5. pycharm第一个Python程序
  6. Java开发工具(Eclipse中内容辅助键的使用)
  7. 《编译与反编译技术实战 》一2.3 编译器的设计与实现概述
  8. antlr-2.7.6.jar的作用
  9. ffmpeg 基本用法大全
  10. Windows Mobile 6.0 SDK和中文模拟器下载