首页 > 解决方案 > 如何测量字符串宽度并指定语言脚本

问题描述

我已经使用 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 是否支持不同的脚本?我如何定义它们?

标签: c#gdi+

解决方案


推荐阅读