如何在Skia中获取衬线字体?能否向SKTypeface.FromFamilyName请求衬线字体而非指定具体字体名?
Skia中衬线字体的获取方案
1. 获取衬线字体的方法
你可以通过两种方式获取衬线字体:
- 枚举系统字体并筛选:利用
SKFontManager枚举所有可用字体,结合字体属性筛选出衬线类型的字体。示例代码:var fontManager = SKFontManager.Default; foreach (var familyName in fontManager.FamilyNames) { var typeface = SKTypeface.FromFamilyName(familyName); if (typeface != null) { // 通过匹配通用Serif族验证是否为衬线字体 var defaultSerif = SKTypeface.FromFamilyName("Serif"); if (typeface.FamilyName == defaultSerif.FamilyName) { Console.WriteLine($"找到衬线字体:{familyName}"); } } } - 直接匹配系统默认衬线字体:更高效的方式是使用通用字体族名称直接请求。
2. 不指定具体名称请求衬线字体
完全可以!Skia支持使用通用字体族名称请求对应类型的字体,无需指定具体字体名。你只需给SKTypeface.FromFamilyName传入"Serif"这个通用族名,Skia会自动选择系统默认的衬线字体。示例代码:
// 获取系统默认衬线字体 var serifTypeface = SKTypeface.FromFamilyName("Serif", SKFontStyle.Normal); if (serifTypeface != null) { Console.WriteLine($"系统默认衬线字体:{serifTypeface.FamilyName}"); }
这种方式跨平台兼容,在不同系统上会自动适配对应默认衬线字体(比如Windows的Times New Roman、macOS的Times、Linux的Liberation Serif等)。
另外,Skia还支持其他通用族名:"Sans-serif"(无衬线)、"Monospace"(等宽)、"Cursive"(手写体)、"Fantasy"(装饰体)。
内容的提问来源于stack exchange,提问作者ikegami
相关产品推荐
相关产品推荐

