[英]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
的默認行為是在所繪制文本的邊界矩形中添加填充,以適應懸垂的字形。 如果您需要繪制一行文本而沒有這些多余的空格,請使用帶有Size
和TextFormatFlags
參數的DrawText
和MeasureText
版本,如示例所示。
您還必須傳遞Graphics
對象以獲得正確的結果,因為:
MeasureText(String, Font, Size, TextFormatFlags)
此重載將忽略NoPadding
或LeftAndRightPadding
的TextFormatFlags
值。 如果指定的填充值不是默認值,則應使用帶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.