Почему TextRenderer.MeasureText неправильно измеряет текст с использованием более крупных шрифтов в C #?

Я получаю размер строки в пикселях и конвертирую его в сотые доли дюйма (т.е. пиксели / DPI = дюймы, дюймы * 100 = сотые доли дюйм). Вот мой код:

private static SizeF TextSize(string text, Font txtFnt)
{
    SizeF txtSize = new SizeF();

    // The size returned is 'Size(int width, int height)' where width and height
    // are the dimensions of the string in pixels
    Size s = System.Windows.Forms.TextRenderer.MeasureText(text, txtFnt);

    // Value based on normal DPI settings of 96
    txtSize.Width = (float)Math.Ceiling((float)s.Width / 96f * 100f); 
    txtSize.Height = (float)Math.Ceiling((float)s.Height / 96f * 100f);

    return txtSize;
}

Теперь, используя шрифт Arial, все это отлично работает для шрифтов меньше 12, но после этого символы начинают обрезаться, потому что расчетный размер меньше фактического. Я знаю, что мои настройки DPI установлены на 96. Все мои шрифты определены одинаково с изменением размера шрифта:

Font myFont = new Font("Arial", <font size>, FontStyle.Regular, GraphicsUnit.Point);

Я считаю, что мне нужно использовать GraphicsUnit.Point из-за настраиваемого элемента управления, который я я рисую строки, но имеет ли значение GraphicsUnit ?

Функция MeasureText работает правильно или что-то еще происходит?

EDIT

Я рисую в настраиваемом элементе управления предварительным просмотром печати. Единицы измерения в элементе управления предварительным просмотром печати - «дюймы / 100» (отсюда и преобразование). Я считаю, что текст, изображения и т. Д. Нарисованы с помощью графического объекта Printer, но я не совсем уверен.

5
задан sarnold 10 June 2011 в 02:04
поделиться