Как я могу получить размеры нарисованной строки без заполнения? - PullRequest
0 голосов
/ 21 апреля 2010

Я пытаюсь создать изображение с текстом на нем, и я хочу, чтобы размер изображения соответствовал размеру отображаемого текста.

Когда я использую System.Windows.Forms.TextRenderer.MeasureText(...) для измерения текста, я получаю измерения, которые включают заполнение шрифтов.Когда текст отображается, он, похоже, использует тот же отступ.

Есть ли способ определить размер строки текста и затем отобразить ее без каких-либо отступов?

Это код, который я пробовал:

// Measure the text dimensions
var text = "Hello World";
var fontFamily = new Font("Arial", 30, FontStyle.Regular);
var textColor = new SolidBrush(Color.Black);
Size textSize = TextRenderer.MeasureText(text, fontFamily, 
                             Size.Empty, TextFormatFlags.NoPadding);

// Render the text with the given dimensions
Bitmap bmp = new Bitmap(textSize.Width, textSize.Height);
Graphics g = Graphics.FromImage(bmp);
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
g.DrawString(text, fontFamily, textColor, new PointF(0, 0));            
bmp.Save("output.png", ImageFormat.Png);

Это то, что в данный момент выдается:

Current Output

Это то, что я хочу сделать:

Desired Output

Я также изучил Graphics.MeasureString(...), но это можно использовать только для существующего объекта Graphics.Я хочу знать размер до создания изображения.Кроме того, вызов Graphics.MeasureString(...) возвращает те же измерения, поэтому мне это не поможет.

1 Ответ

1 голос
/ 21 апреля 2010

Я думаю, это потому, что высота шрифта составляет 46 для шрифта 30 точек.
Это позволяет использовать специальные заглавные буквы (ÉÖÄÅ) и символы любовного регистра (gqp).
Ведущие и конечные пробелы, вероятно, также как-то связаны с этим.

...