c# - 如何测量字符串宽度并指定语言脚本
问题描述
我已经使用 System.Drawing.Graphics 使用这个(简化的)代码片段成功地测量了字符串:
var cachedFont = cachedFont = new System.Drawing.Font(pfc.Families[0], line.FontSize, fontStyle, GraphicsUnit.Pixel);
format.SetMeasurableCharacterRanges(new[] { new CharacterRange(0, line.Text.Length) });
var regions = graphics.Value.MeasureCharacterRanges(line.Text, cachedFont, new Rectangle(0, 0, 10000, 0), format);
double result = 0;
for (var i = 0; i < regions.Length; i++)
{
var region = regions[i];
result += region.GetBounds(graphics.Value).Width;
region.Dispose();
}
return result;
但是,我需要支持 OpenType 布局,它可能对特定字符有多种语言变体,具体取决于语言脚本(例如阿拉伯语、泰语、CJK 脚本等)
当使用系统默认脚本测量字符串时发生字形替换时,可以安全地假设测量结果不正确。
System.Drawing.Graphics 是否支持不同的脚本?我如何定义它们?
解决方案
推荐阅读
- python - 我无法从本地机器上生成的 url 访问我的烧瓶应用程序
- solr - 如何在 Solr 中使用 Config API 添加具有多个字典的建议器组件?
- java - SpringBoot Bean Validation 注解
- r - 使用for循环从r中的数据框中删除特定列
- javascript - JavaScript 键按住并释放
- xml - 使用 RMLMapper 将 XML 嵌套到 Turtle 映射
- laravel - Bootstrap 4在关闭时破坏模态
- r - 每次一行包含字符串中的字符时,如何添加一个计数器?
- open-liberty - MicroProfile REST客户端上的容错@Asynchronous导致Windows上打开自由核心转储
- javascript - 无法在 Javascript 中显示数据