0

我有一个阿拉伯字符串,它是阿拉伯字符串和“:100”连接的结果。该字符串的测量和绘制不正确。为什么?

public partial class Form1 : Form {
    string strIncorrectMeasure = "مەھسۇلات باھاسى" + " : " + "100";//"مەھسۇلات باھاسى : 100";
    string strCorrectMeasure = "100 : مەھسۇلات باھاسى";
    Font font = new Font("Oybab tuz", 18);

    public Form1() {
        InitializeComponent();
    }

    void button1_Click(object sender, EventArgs e) {
        var bitmap = new Bitmap(100, 100);
        var graphics = Graphics.FromImage(bitmap);
        StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLeft | StringFormatFlags.NoFontFallback | StringFormatFlags.NoClip);
        SizeF measuredIcorrectSize = graphics.MeasureString(strIncorrectMeasure, font, 0, format);
        SizeF measuredCorrectSize = graphics.MeasureString(strCorrectMeasure, font);
        MessageBox.Show(string.Format("FirstString : {0}\nSecondString: {1}", measuredIcorrectSize, measuredCorrectSize));
    }
    void Form1_Paint(object sender, PaintEventArgs e) {
        var font = new Font("Oybab tuz", 18);           
        StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLeft);
        e.Graphics.DrawString(this.strIncorrectMeasure, font, Brushes.Black, new PointF(300, 10), format);
        e.Graphics.DrawString(this.strCorrectMeasure, font, Brushes.Black, new PointF(10, 50));
    }
}

这个问题有可能是由这个特定的字体引起的吗?

4

2 回答 2

0

我还没有找到解决方案。我认为,字体本身的问题。其他字体工作正常。

于 2015-09-02T15:25:58.313 回答
-1

我找不到 Oybab tuz 字体。但是,使用SystemFonts.MenuFontand SystemFonts.DefaultFont,两种尺寸的结果是相同的。

使用Graphics.MeasureStringMenuFont返回值 162.1289。但是,在位图编辑器中截取屏幕并测量真实宽度会得到 155 像素的宽度。如果您需要真正的宽度,那么您需要将文本绘制到位图上,然后通过查看像素值来找到边界矩形。

此外,您不需要创建 aBitmap来获取Graphics对象。只需调用CreateGraphics(). 此外,您应该通过将对象包装在using语句中来处理它们。

于 2015-08-18T19:31:35.283 回答