c++ freetype 解析可变字体(Variable font)

news2024/12/29 9:02:27

什么是可变字体 上一篇文章说了
传送门也懒的贴了, 自己去翻吧

前言

我这里不会贴完整的代码
也不会说的那么细,主要提供一些关键点和方法

正文

‘name’ 表table 解析

TrueType 字体的解析
字体里面有很多的表table
我们需要的family和style
都在这个’name’表里,首先要把name表解析出来

苹果 truetype的开发手册
https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html
这个文档要多读两遍 我贴点关键的

在这里插入图片描述

在这里插入图片描述

我们可变字体 需要的 axis instance 等等信息 全部在 256-32767的特殊自定义的段中

我直接遍历 把所有的id 和 name str 先打印出来看一下

demo 代码 临时测试用的 参考下就行, 找到name 表,遍历输出
在这里插入图片描述

都输出出来了,新问题来了, 文档也没说怎么识别 axis 和 instance啊
无法区分啊啊啊
在这里插入图片描述

不要慌

通过 freetype

下面的freetype的文档
https://freetype.org/freetype2/docs/reference/ft2-multiple_masters.html#ft_mm_var

我们需要的就是这个 读取axis 和 instance

在这里插入图片描述

demo 代码,懒的命名 直接 乱敲 咋快咋来

在这里插入图片描述

全部读出来了

在这里插入图片描述
这些东西就都能拿到了
ok

不翻墙一点资料都找不到, 我这里只是提供思路和流程
这些信息也足够了,自己啃文档就能完成自己的需求了

end 88

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++在线五子棋对战(网页版)项目:websocket协议

目标:认识理解websocket协议、websocket切换过程和websocket协议格式。认识和学会使用websocketpp库常用接口。了解websocketpp库搭建服务器流程,认识和学会使用websocketpp库bin接口,最后使用websocketpp库搭建服务器。 初识websocket WebS…

OJ# 384 敲七

题目描述 ​ 有 N 个人在玩一种“敲7”游戏,游戏的规则是这样的:第 x 个人从 t 开始报数,然后按顺序报数, 当某人报的数是 7 的倍数或数字中含有 7 时,便被淘汰,剩下的人继续报数,直到只剩下一…

【CesiumJS入门】(6)修改3D Tiles(tileset)的位置及高度

前言 在之前一篇博客中【CesiumJS入门】(4)加载3D Tiles并获取tileset,我们成功得加载了3D Tiles数据集,本篇中,将会向大伙儿介绍tileset位置的修改与恢复: 直接上代码了 /** Date: 2023-06-28 19:35:03*…

操作系统OS(二)进程和线程

进程 所谓进程,简单来说是计算机中的各种任务。 进程是程序的一次执行,是操作系统进行资源分配和调度的基本单位。 进程结构PCB 进程结构: 控制块PCB:进程唯一标识 程序段:同一个应用程序的多个进程 数据段&#xf…

Pytorch中的Exponential Moving Average(EMA)

EMA介绍 EMA,指数移动平均,常用于更新模型参数、梯度等。 EMA的优点是能提升模型的鲁棒性(融合了之前的模型权重信息) 代码示例 下面以yolov7/utils/torch_utils.py代码为例: class ModelEMA:""" …

ELK报错no handler found for uri and method [PUT] 原因

执行后提示no handler found for uri and method post,最新版8.2的问题? 原因: index.mapping.single_type: true在索引上 设置将启用按索引的单一类型行为,该行为将在6.0后强制执行。 原 {type} 要改为 _doc,格式如…

优炫软件自主研发再结硕果,共享存储SRAC集群数据库重磅发布

新一轮科技革命重塑全球经济结构,关键核心技术是产业发展的基石,数据库、芯片、操作系统是我国数字技术领域三大卡脖子难题。数据库向下发挥硬件算力,向上使能应用系统,是各行各业业务系统运行的基础,是软件行业皇冠上…

光口的作用及应用场景

在光通信中,交换机是一个非常重要的设备,它的作用是将来自不同设备的数据包进行收发和交换。之前发布的文章我们有了解到交换机的光口是如何配置的,本期文章我们将详细讨论交换机的光口的作用及应用场景。 一、光口的主要作用 交换机的光口…

适合团队人数少,预算低的四种办公室类型

如果团队人数少且预算低,以下是一些在深圳比较适合租赁的办公室类型: 1. 联合办公空间:联合办公空间是一种灵活的办公模式,通常提供共享的办公环境和设施,如会议室、休息区、打印机等。这种模式的办公室租金通常较低&…

Linux下Master-Master Replication Manager for MySQL 双主故障切换

简述: Master-Master Replication Manager for MySQL(MMRM)是一种用于MySQL数据库的主-主复制管理工具。它允许在多个MySQL主机之间建立双向的主-主复制关系,实现数据的同步和高可用性。 工作原理是通过在每个MySQL主机上配置双…

javascript 剪贴板数据

本篇文章将介绍在 JavaScript 中检测粘贴事件上的剪贴板数据。 JavaScript 剪贴板数据 当用户通过浏览器 UI 启动粘贴操作时,将引发粘贴事件。 当光标位于可编辑上下文中时,默认操作是将剪贴板的内容粘贴到光标位置的文档中。 此事件的处理程序可以通过…

性能优化 :删除项目中没有引用关系的文件 useless-files-webpack-plugin

一般此类包不需要安装到项目中,减少node_modules体积(以项目实际情况决定-S/-D) npm i useless-files-webpack-plugin -S然后再vue.config.js中配置 const UselessFile require(useless-files-webpack-plugin) chainWebpack: config > …

KEIL支持中文编辑

默认只支持英文,中文一粘贴就变成问号。怎么办? 菜单:Edit, Configuration 点击Encoding的下拉按钮,选择GB2312.

关于Http Header必须了解的知识

header是发送请求时携带的头部信息。通常一些鉴权的信息:authentication/cookie、响应的数据格式:content-type等等的设置。当然响应的数据也会返回一些头部信息。 Requests Header,请求头信息  Responses Header&…

自动化测试中如何比较颜色

引言 在做Nightwatch自动化测试中,出现需要比较颜色的时候如何来做? 基本的思路是首先需要取到这个element的颜色值,然后跟预期的颜色进行对比。 比如我要取下面这个会话窗口的颜色,选中这个图标,按F12,查…

Java实现office办公文档在线预览(word、excel、ppt、txt等)

文章目录 一、官网下载openOffice 安装包,运行安装(不同系统的安装请自行百度,这里不做过多描述) 二、pom中引入依赖 三、office文件转为pdf流的工具类 四、service层代码 五、controller层代码 office办公文档,如doc…

C语言编程—预处理器

预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CP…

文心一言 VS 讯飞星火 VS chatgpt (52)-- 算法导论6.2 4题

四、当i>A.heap-size/2 时,调用 MAX-HEAPIFY(A,i)会有什么结果? 文心一言: 当 i > A.heap-size/2 时,调用 MAX-HEAPIFY(A, i) 会将 A[i] 与其子树中的最大元素进行交换,并将 A[i] 视为新的根节点。这个操作会…

移动WEB开发之flex布局

css基础(一)css基础(一)_上半场结束,中场已休息,下半场ing的博客-CSDN博客Emmet语法Emmet语法_上半场结束,中场已休息,下半场ing的博客-CSDN博客css基础(二)c…

Spring Boot中的STOMP Broker:原理及使用

Spring Boot中的STOMP Broker:原理及使用 简介 STOMP(Simple Text Oriented Messaging Protocol)是一种基于文本的协议,用于在Web应用程序之间传递消息。STOMP提供了一种简单的方式来实现WebSocket的双向通信。在Spring Boot中&…