MeasureText не работает правильно - PullRequest
2 голосов
/ 08 ноября 2011

У меня есть объект Bitmap, на котором я хочу нарисовать текст.Этот текст должен быть выровнен прямо для данной точки.Вот как я это делаю прямо сейчас:

newBitmap = Image.FromFile(bg) as Bitmap;
Graphics g = Graphics.FromImage(newBitmap);
var cvt = new FontConverter();

String temp = "ddddd"

ftemp = cvt.ConvertFromString("Times New Roman; 12pt") as Font;
SizeF p2Size = TextRenderer.MeasureText(temp, ftemp);
p2Nick = new PointF(PosX - p2Size.Width, PosY);

g.DrawString(temp, ftemp, new SolidBrush(myColor), p2Nick);

Проблема в том, что чем больше текста я ввожу для температуры, тем больше расстояние с правой стороны.

enter image description here

Может быть, кто-то может указать на мою ошибку.Конечно, я сильно упростила, но это почти то, что происходит.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2011

Аааа, мне это нравится ... Я часами просматривал свой код и не мог найти свою ошибку. Просто вышел на несколько минут, вернулся и понял, что я немного искажаюсь после вычисления новой позиции, но я не настраиваю новое разрешение в расчетную точку.

Мне очень жаль задавать этот вопрос -.-

0 голосов
/ 08 ноября 2011

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

например:.

SizeF p2Size = g.MeasureString(temp, ftemp);

Кроме того, текстовые настройки DPI системы будут влиять на результат, вы можете учесть это с учетом: Graphics.DpiX.

Наконец, я думаю, что есть настройка TextFormatFlags.NoPadding, которая может помочь, но вы вместо этого будете использовать объект StringFormat, если переключитесь на Graphics.MeasureString().

...