簡體   English   中英

為什么TextRenderer在測量文本時增加邊距?

[英]Why TextRenderer adds margins while measuring text?

由於我的應用程序中某些地方缺少Graphics對象,因此我決定使用TextRenderer類。 令人驚訝的是,它為測量文本增加了很多空白。 例如:

private void button1_Click(object sender, EventArgs e) {

    using (var g = this.CreateGraphics()) {

        Font font = new Font("Calibri", 20.0f, GraphicsUnit.Pixel);
        Size size = TextRenderer.MeasureText("Ala ma kota", font);

        g.DrawRectangle(Pens.Red, new Rectangle(new Point(10, 10), size));
        TextRenderer.DrawText(g, "Ala ma kota", font, new Point(10, 10), Color.Black);
    }
}

給出以下結果:

帶邊距的文字

為什么這樣做呢? 有沒有辦法強迫它獲得真實的文字大小? (當然,將其繪制在返回的矩形中)

MSDN

例如, TextRenderer的默認行為是在所繪制文本的邊界矩形中添加填充,以適應懸垂的字形。 如果您需要繪制一行文本而沒有這些多余的空格,請使用帶有SizeTextFormatFlags參數的DrawTextMeasureText版本,如示例所示。

您還必須傳遞Graphics對象以獲得正確的結果,因為:

MeasureText(String, Font, Size, TextFormatFlags)此重載將忽略NoPaddingLeftAndRightPaddingTextFormatFlags值。 如果指定的填充值不是默​​認值,則應使用帶IDeviceContext對象的MeasureText(IDeviceContext, String, Font, Size, TextFormatFlags)的重載。

Size size = TextRenderer.MeasureText(g,
                                     "Ala ma kota",
                                     font,
                                     new Size(int.MaxValue, int.MaxValue),
                                     TextFormatFlags.NoPadding);

TextRenderer.DrawText(g, "Ala ma kota", font,
                      new Point(10, 10),
                      Color.Black,
                      TextFormatFlags.NoPadding);

g.DrawRectangle(Pens.Red, new Rectangle(new Point(10, 10), size));

也可以看看直接使用Graphics方法: GDI + MeasureString()錯誤地修剪了文本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM