freetype
设置EM
// if (m_face)
// FT_Set_Pixel_Sizes(*m_face, 0, pixelSize); // 动态宽,固定高 px
// error = FT_Set_Char_Size(face, /* face 对象的句柄 */
// 0, /* 以 1/64 点为单位的字符宽度 */ pt
// 16 * 64, /* 以 1/64 点为单位的字符高度 */ pt
// 300, /* 设备水平分辨率 */
// 300); /* 设备垂直分辨率 */
// 在 300x300dpi 中的 12pt 大小对应 12*300/72=50 象素
// 象素数 = 点数 × 分辨率/72
// 象素坐标= 网格坐标*象素数/EM 大小
// EM 尺寸越大,可以达到更大的分辨率,TrueType 字体只用 2048 单元的 EM;Type1 PostScript 字体有一个固定 1000 网格单元的EM
// Hinting 控制点网格对齐
/*对齐 bbox 如下:
xmin = floor(bbox.xMin)
xmax = ceiling(bbox.xMax)
ymin = floor(bbox.yMin)
ymax = ceiling(bbox.yMax)*/
获取EM
harfbuzz
设置EM
hb_font_set_scale(m_hbFont, scale, scale);
获取EM
hb_font_get_scale(m_hbFont, &oldScale, &oldScale);
转换原理
使用场景
参考
px,pt,em换算表 | 菜鸟教程
字体字号和dpi的关系 | DeepinWiki
在线数学公式编辑器 可生成公式图片和公式代码 支持Tex数学公式 LaTex数学公式 MathML数学公式 Markdown数学公式
C++字体库开发之freetype vs harfbuzz sfnt表,字体名称,可变轴八-CSDN博客