Текст рисования C#

gfx.DrawString(
    thisTempLabel.LabelText,
    new Font("Arial", (float)thisTempLabel.fontSize),
    Brushes.Black,
    new PointF(thisTempLabel.x, thisTempLabel.y)
    );

Это отлично работает, за исключением того, что я сохраняю размер шрифта (thisTempLabel.fontSize) в пикселях. Я не могу на всю жизнь понять, как их преобразовать (вероятно, невозможно) или что сделать, чтобы решить эту проблему.

Они выходят вроде правильно, но не в правильном положении немного и немного больше.

Точность очень важна.


person Tom Gullen    schedule 03.03.2011    source источник


Ответы (1)


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

public Font(FontFamily family, float emSize)

emSize
Тип: System.Single
Размер em нового шрифта в пунктах.

Похоже, вы можете использовать другую перегрузку, которая принимает параметр GraphicsUnit, который вы можете установить GraphicsUnit.Pixel:

gfx.DrawString(
    thisTempLabel.LabelText,
    new Font("Arial", (float)thisTempLabel.fontSize, GraphicsUnit.Pixel),
    Brushes.Black,
    new PointF(thisTempLabel.x, thisTempLabel.y)
);

Обратите внимание, что вы устанавливаете размер em, который примерно равен высоте символа «M».

person davidtbernal    schedule 03.03.2011
comment
Спасибо! Как бы я изменил свой код, чтобы использовать это? Я нахожу документацию msdn запутанной: S - person Tom Gullen; 03.03.2011