最新要闻
- 追光动画十年集大成之作!电影《长安三万里》预告曝光
- AI换脸小视频泛滥网络 日本人出手:用AI检测真伪
- 全球快资讯丨知名经济学家:特斯拉不可能成为苹果那样的赚钱机器
- 热点!90后女生开比亚迪环游中国:总花费2.3万元 油费+电费还不到3千
- 每日消息!《流浪地球2》“人类股骨”预告发布:AI技术修复李雪健老师声音
- 什么是整理书包?整理书包的心得体会
- 计算机能力是什么意思?计算机能力一般怎么填写?
- 大量元素是什么意思?大量元素和微量元素有哪些?
- 管理报表包括哪些?管理报表和财务报表的区别有哪些?
- 什么是地理位置图?地理位置图用什么软件?
- 全球热议:微软智能语音大升级:方言念古诗无压力
- 每日热门:特斯拉、华为问界大降价!李想:他们都得对比理想L8
- 环球今头条!俩小孩小区内5次放火引燃SUV 专家:熊孩子闯祸家长需兜底
- 每日时讯!机械硬盘大溃败:去年出货量近乎腰斩
- 大众、长安“缝合怪”?换代天籁消费者不买账 跌出B级车前十榜
- 焦点播报:国产科幻巨制!《流浪地球2》预售票房突破4000万
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
当前视讯!在WPF程序中,使用Freetype显示字体
本人使用WPF开发了一款OFD阅读器,显示字体是阅读器中最重要的功能。处理字体显示有多种方案,几易其稿,最终选用Freetype方案。本文对WPF中如何使用了Freetype做简单描述。
(资料图)
OFD中有两种字体:嵌入字体和非嵌入字体。1)非嵌入字体就是只提供字体名称,不提供字体对应的文件。2)嵌入字体:提供字体文件,字体名称是啥并不影响显示。由于阅读器中需要显示大量文本,必须采用最优的方式显示,否则性能难以满足要求。
WPF字体显示有多种方案。 通常可以将文本呈现分为三层:
- 直接使用 Glyphs 和 GlyphRun 对象。
- 使用 FormattedText 对象。
- 使用高级控件,如 TextBlock 和 FlowDocument 对象。
第三种方案,显然不合适,可行的只有第一和第二种方案。对于嵌入字体,必须采用第一种方案;非嵌入字体可以采用第一和第二种方案。总之,可以采用第三种方案解决一切字体问题。
但是,本人在使用GlyphRun过程中,遇到很多奇怪的问题,有两方面原因导致的:
1)越底层的功能使用的人越少,缺少相应资料。
2)微软在开放底层功能上犹抱琵琶半遮面,导致使用过程中不知所以然,遇到问题难以解决。
本人开发的OFD阅读器最初采用了WPF自带字体方案,遇到很多坑,还有一些坑无论如何也解决不了。痛定思痛,决定采用Freetype库显示字体;经过一番折腾,终于成功了。
历经曲折,获得一番感悟:微软为了使开发者开发更方便,屏蔽了太多底层的东西;这导致开发人员遇到问题时无所适从。不要紧盯着微软不放;另辟蹊径,反而柳暗花明又一村。
使用Freetype显示字体前,需要弄明白字体的本质;字体的本质就是一系列曲线和对应的unicode编码;显示字体就是画曲线,和画一条直线、圆等没有区别。unicode编码是为了交互用的,从阅读器上复制一行字,其实就是复制字体的unicode编码。字体除了这些属性以外,还有很多概念:字体高度、行间距、baseline、原点等。
使用Freetype,就需要获取每个字体对应的曲线和字体相关的一些列属性。但是,Freetype是用c语言开发的,导出的函数接口难以与c#交互,需要在Freetype的基础上再次封装,以方便c#调用。以获取字体对应的曲线为例,阐述如何进一步封装Freetype。
我们见到的曲线多种多样;但是从底层来看,所有的曲线可分为两类:直线和贝塞尔曲线。这些恰好对应OFD的图形对象(PathObject),看下图:
OFD文件中一段图形对象:
阅读器处理PathObject时,就需要解析这些字符串,生成对应的曲线。Freetype也需要从字库中解析出曲线,其对应的函数是非常复杂的,摘录一段函数:
很显然,c#无法直接使用;考虑PathObject的描述方式,本人眼前一亮,何不将字体曲线描述为PathObject方式,对外输出字符串。函数接口定义如下:
extern "C" FREETYPELIB_EXPORT INT32 Freetype_GetTextPath(UINT64 handle, UINT32 nGlyphIndex, INT32 fontSize, char* textPath, INT32 textPathLen);
textPath包含曲线信息,其格式与OFD中的PathObject规范一致,我们就可以用处理PathObject的方式处理字体。WPF显示曲线使用PathGeometry,需要将textPath转换为PathGeometry。再而,我们就可以使用WPF类DrawingContext画出曲线
class DrawingContext{public abstract void DrawGeometry(Brush brush, Pen pen, Geometry geometry); ......}
至此,字体就可以显示出来了。通过这一番操作,我们也对字体的本质有更加深刻的了解。前文只是简单对显示字体做了讲述,要正确处理字体还有大量的工作要做。
Freetype性能如何?
功能正常了,下一步关心的问题就是性能。为了提高性能,从FreeType获取字体的PathGeometry时做缓冲;同一个字体,下次显示时,直接使用上次的字体生成的PathGeometry,不再从Freetype获取字体。本人做了简单的对比测试,Freetype性能要高于使用FormattedText方案,性能大概提升三倍;与GlyphRun方案没做对比。
总结:使用FreeType库,可以使我们更好的理解底层处理逻辑,更好的理解字体的本质。抓住了本质,就能直面问题,解决问题就顺畅很多。不同的库、不同函数都有它的应用场景;当微软提供的库不再适合当前应用时,大胆的使用新库,反而可能使我们快速走出困局!
当前视讯!在WPF程序中,使用Freetype显示字体
追光动画十年集大成之作!电影《长安三万里》预告曝光
AI换脸小视频泛滥网络 日本人出手:用AI检测真伪
全球快资讯丨知名经济学家:特斯拉不可能成为苹果那样的赚钱机器
热点!90后女生开比亚迪环游中国:总花费2.3万元 油费+电费还不到3千
每日消息!《流浪地球2》“人类股骨”预告发布:AI技术修复李雪健老师声音
什么是整理书包?整理书包的心得体会
计算机能力是什么意思?计算机能力一般怎么填写?
大量元素是什么意思?大量元素和微量元素有哪些?
管理报表包括哪些?管理报表和财务报表的区别有哪些?
什么是地理位置图?地理位置图用什么软件?
怎么用烤箱烤饼干?用烤箱烤饼干的做法是什么?
焦点热文:冰蝎V4.0流量分析到攻防检测
剑灵武神塔怎么进?剑灵武神塔20层苏向阳怎么打?
安卓手机相册在哪个文件夹?安卓手机相册怎么加密?
appsync是什么意思?如何安装appsync?
安卓系统怎么升级?安卓系统和鸿蒙系统哪个好?
全球热议:微软智能语音大升级:方言念古诗无压力
每日热门:特斯拉、华为问界大降价!李想:他们都得对比理想L8
环球今头条!俩小孩小区内5次放火引燃SUV 专家:熊孩子闯祸家长需兜底
每日时讯!机械硬盘大溃败:去年出货量近乎腰斩
大众、长安“缝合怪”?换代天籁消费者不买账 跌出B级车前十榜
世界热消息:学习笔记——Spring底层IOC实现;Spring依赖注入数值问题;Spring依赖注入方式
速读:FlinkSQL 时间类型转化使用小结
焦点播报:国产科幻巨制!《流浪地球2》预售票房突破4000万
微速讯:动画扑街、电视剧成神 《三体》电影版最新进展公布
嫦娥五号科研成果!中国科学家精确测定月球年龄:20.3亿年
世界快报:迪士尼联名!美特斯邦威羽绒服大促 原价500多现1百多到手
画面震撼!五菱小汽车排队“坐”火车去墨西哥
天天百事通!LibreOJ L6210 「美团 CodeM 决赛」tree
读编程与类型系统笔记09_泛型数据结构
热头条丨17岁少女晒爸爸500元买的奢侈包包遭群讽 含泪反击 结局暖心
天天热资讯!2023年我国新能源汽车销量可达950万辆:全球第一没跑 电池便宜到发指
“U盘之父”朗科房东不好当:腾讯租的15层大楼突然全退了
今日最新!1%超级富豪拿走全球三分之二新财富:穷人越来越多 专家称应财富重分配
全球消息!曾被网友戏称“候机大棚” 佛山机场花2000万改造完成
【新视野】降价后 特斯拉订单数环比涨500%!马斯克赢麻了
盗版阿凡达2合法后!Intel、微软、NV等低调回俄罗斯 身体诚实
环球信息:联想小新Pro 2023魔改140W快充 搭载新一代聚能电池有多强?
滚动:要么卸载、要么盗版!视频平台赚钱只能靠“割韭菜”:你无力反抗?
2个大厂 100亿级 超大流量 红包 架构方案 (史上最全)
VUEX 的使用学习二: state
环球时讯:我的2022
每日时讯!疑似被王思聪殴打者发声:没有赔209万 具体金额闭口不提
天天热推荐:小米最强旗舰!曝小米13 Ultra提供16+512GB版本
天天新动态:小米MIX Fold 2推送MIUI 14稳定版:系统大精简、支持光子引擎
女子网购100根仙女棒 收到100根铁丝:商家一句话噎死人
AMD Zen4锐龙终于要真正便宜了!果断坐等
【天天速看料】洛谷P2294. [HNOI2005] 狡猾的商人
当前关注:轻松解决 CSS 代码都在一行的问题
Cookie 会话身份验证是如何工作的?
世界速看:以太坊签名从数学原理到安全应用
焦点滚动:女子买老陈醋买到“老陈西昔”:雷碧、康帅傅、娃啥啥等山寨货防不胜防
全球观点:国内供不应求的红魔8 Pro亮相海外:配置变了
威武!北京跻身全球百强科技集群前三 研发强度超纽约
世界快资讯:Matplotlib绘制散点图与条形图
全球实时:Hack The Box系列——【Markup】XML外部实体注入(XXE)
算法学习笔记(11): 原根
【全球快播报】ASP.NET Core+Element+SQL Server开发校园图书管理系统(一)
Blazor技术入门
种植牙的高价:被打碎了
为一季度量产做准备!宁德时代申请注册“麒麟电池”商标
MacBook Air迎15岁生日 首次亮相由乔布斯从信封取出
全球报道:市场被国产手游席卷了 日本:课税!
今日最新!男孩寒假送外卖:20天挣7700元 给妈妈2000买年货
热资讯!一加11R现身印度官网:低频版骁龙8+、120Hz高刷屏
当前资讯!法拉利超跑当婚车 雪天接亲上坡频繁打滑 网友:后驱车肯定滑
一次性塑料餐具:开始被禁了
全球热议:关于GIT使用的扫盲知识
【深度解读】卫星通信工作频段
新一代安卓机皇!三星Galaxy S23 Ultra拍照分辨率达12240x16320
环球热点评!旺旺大礼包 经典零食箱62元2.7斤 送礼囤货必备
极端寒流来袭:吉尔吉斯斯坦终年不冻“热湖”罕见被冰封
弟弟发现姐姐首饰装备库原地惊了:被骗好多年!网友求购买链接
天天热资讯!男子网购晾衣杆 却被告知2024年发货!客服回应:说错了
【时快讯】爱优腾收费贵、限制多 网友奉上免费视频攻略:全靠Intel
每日焦点!车祸后发视频庆大难不死 结果被殡葬号关注!男子:别介
热讯:大海送“年货”!烟台海边再现大量海肠 大家抢疯:有人一会捞3千斤赚大
环球时讯:配F1赛车同款发动机能追中国高铁!梅赛德斯AMG ONE正式交付
【全球热闻】液流电池有望“弯道超车”?新技术使其尺寸锐减75% 成本更低
视点!蔚来AR眼镜专利公布:可稳定显示车载信息
AITO问界降价效果一般 李想:销量少的产品、没资格成为别人的竞品
索尼PS5千万别长期竖向放置?反转了!维修店:原装主机别担心
Adversarial Active Learning based Heterogeneous GNN for Fake news Detection-ICDM
环球要闻:linux科普:如何标准的安装和升级软件
vue事件修饰符
《流浪地球2》导演郭帆教刘德华济宁话拜年:父老乡亲们新年快乐
当前播报:不怕零下40℃极寒!最“抗冻”复兴号将在“最北”高铁首次开行
美国一州提议“禁售电动车”:石油、天然气太挣钱了
快报:高手在民间!男子7厘米壶内壁画生肖兔
河北女司机发现大量车“逆行” 真相来了:都没逆行 路口设计问题
环球速讯:AcWing. 1072 树的最长路径
【天天聚看点】微信对话生成器,WeChat对话生成,可生成文字、语音、转账、红包,朋友圈装X神器~
天天简讯:Spring Boot 项目打包 .exe 可执行程序,实战来了!
41光年远 韦伯望远镜首次发现系外行星:跟地球几乎一样大
【热闻】连刷10小时B站无问题!联想小新Pro 14搭载75Wh大电池
天天速读:《黑神话:悟空》定档2024年夏天!NVIDIA:将支持光追和DLSS 3
暴风再被限消未履行总额超8亿 昔日风光变为凄惨落幕
【环球聚看点】十二生肖为什么没有猫咪?真相揭开
如何安装球形门锁