DrawString и DrawRectangle, использующие одинаковые X & Y, начинаются в разных местах - PullRequest
4 голосов
/ 06 июля 2011

У меня есть следующий код:

public void DrawLetter(int Cell, string Letter, int X, int Y)
{
   System.Drawing.Font fBody = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

   Pencil.DrawString(Letter, fBody, System.Drawing.Brushes.Black, X, Y);
   Pencil.DrawRectangle(new Pen(System.Drawing.Brushes.Red), X, Y, 10, 10);        
}

Когда я повторяю это дважды и использую 140,249 и 296,249 в качестве координат, прямоугольник появляется так, как я и ожидал в правильной позиции, но строка появляется на несколько пикселей, и я не могу понять, почему.

Я вставил DrawRectangle, чтобы убедиться, что он запускается в правильном положении, и это так. Я делаю что-то не так в DrawString? Также, если я нарисую D и Z, ширина D будет 10px, а Z равна 8px, я подумал, что с помощью Courier это даст мне фиксированную ширину?

ОБНОВЛЕНИЕ: Я посмотрел образец на MSDN и вот скриншот. Даже если DrawString расположен в 0,0, вы можете видеть, что буква не появляется в 0,0. Прямоугольник, хотя. Там должно быть дополнение или что-то:

Screenshot

ОБНОВЛЕНИЕ 2: Использование следующего кода, кажется, улучшает ситуацию, хотя и не идеально:

StringFormat strFormat = new StringFormat(StringFormat.GenericTypographic);
Pencil.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
Pencil.DrawString(measureString, stringFont, Brushes.Black, new PointF(0, 0), strFormat);

Screenshot 2

1 Ответ

0 голосов
/ 06 июля 2011

Не будет ли отступ по умолчанию / высота строки и т. Д. Учитываться для шрифта "Courier New", не так ли?

...