Рисование последовательности GDI + в точно в указанном пункте

У меня есть проблема с рисованием последовательности в c#

Вот мой код:

Graphic.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
Pen pen = new Pen(brush, 2f);
Font font = new Font("Segoue UI", 15);
graphic.DrawString("2", font, brush, new PointF(0f, 0f));

Ранее я создал picturebox, и я сделал графический obiect от него. Проблема состоит в том, что "2" не подходит к концу (0; 0), но в (4; 5). Событие, если я выключаю AntiAlias, находится все еще в (4; 5).

Я проверяю его, проводя две линии от (0; 0) к (200; 0) и от (0; 0) к (0; 200), и согласно им я вычислил ту ошибку в рисовании последовательности.

Какие-либо идеи, почему? Я должен потянуть последовательность в точно пункте.

Править я также пробовал шрифт набора таким образом:

Font font = new Font("Microsoft Sans Serif", 10);

и потяните "2" в (0,0), реальное положение "2" (3,3). С рисунком "1" ошибка - то же самое (3; 3).

0
nl ja de
Это - способ, которым работает высота линии.
добавлено автор SLaks, источник
msdn.microsoft.com/en-us/library/xwf9s90b%28v=VS.85%29.aspx
добавлено автор Hans Passant, источник
Попытайтесь установить свойства выравнивания текста явно, как объясняют на эта страница.
добавлено автор 500 - Internal Server Error, источник
Пожалуйста, опубликуйте снимок экрана, таким образом, мы знаем то, что “"2" не подходит к концу (0; 0), но в (4; 5)” означает.
добавлено автор Dour High Arch, источник
Даже если я использую это: ручка Пен = новая Пен (щетка); проблема все еще остается
добавлено автор Yozer, источник

2 ответы

Graphics.DrawString is automatically padding the box it uses to draw strings. The reason is that it's purpose is to draw label texts etc. for controls and therefor is "ready-made" so there is padding around the text.

Microsoft в конечном счете поняла, что этот подход не был лучшим для ситуаций, когда один необходимый более точный текстовый рисунок (т.е. текстовые редакторы и т.д.), и по этой причине развивал TextRendered класс, который обертывает GDI вместо GDI +, и отдайте "старый" более точный рисунок последовательности.

Попытка:

TextRenderer.DrawText(e.Graphics, "2", font, new Point(0, 0), brush);

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

Примечание: если необходимо измерить текст, важно использовать TextRenderer. MeasureText() для этого.

For more details, go to:
http://msdn.microsoft.com/en-us/library/system.windows.forms.textrenderer.aspx

Flags:
http://msdn.microsoft.com/en-us/library/w3cdh3zw.aspx

1
добавлено
Спасибо за ответ. Флаг работы NoPadding, но только для левой стороны. Так i' m тянущий tekst с указанным шрифтом и i' m просто проверяющий "manualy", где текст, и затем i' m вычисление ошибки рисунка.
добавлено автор Yozer, источник

что происходит, если у вашей "последовательности" есть спускающееся письмо, как g или j? каждый шрифт допускает спускающиеся части писем, таким образом, вы, возможно, должны были бы объяснить это, смотря на метрики шрифта

http://msdn.microsoft.com/en-us/library/xwf9s90b.aspx

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot