Почему строки Windows Forms выглядят так некрасиво, когда сглаживаются?

Я вручную отображаю некоторые строки поверх GraphicsBox, потому что у вас не может быть метки с прозрачным фоном.

Независимо от того, какой режим рендеринга я пробую, я не могу заставить строки выглядеть хорошо (то есть как они выглядят в Word или в графической программе).

Вот изображение макета интерфейса по сравнению с тем, что отображается на экране: введите описание изображения здесь

К сожалению, StackOverflow, кажется, сокращает изображение, так что вот и прямая ссылка: http://i.stack.imgur.com/vYFaF.png

А вот код, используемый для визуализации:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
  Graphics labelDrawing = e.Graphics;
  labelDrawing.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

  labelDrawing.DrawString("Setup Progress", new Font("Calibri", 10, FontStyle.Bold, GraphicsUnit.Point, 0), new SolidBrush(Color.Black), new Point(12, 9));
  labelDrawing.DrawString("The following components are being configured.", new Font("Calibri", 10, FontStyle.Regular, GraphicsUnit.Point, 0), new SolidBrush(Color.Black), new Point(24, 27));
}

Я попытался изменить TextRenderingHint для каждого параметра по очереди, но независимо от того, что я пытаюсь сделать, если есть какое-либо сглаживание, оно получается в размытом, смазанном беспорядке, как на скриншоте. Есть идеи?

13.10.2009 08:38:44
Я использовал этикетки с прозрачным фоном. Какие проблемы возникли при установке свойства BackColor метки в Transparent?
Matt Hamilton 13.10.2009 08:46:48
Установка прозрачного BackColour просто дает мне серый фон, по-видимому, это связано с тем, что метки всегда выбирают фон родительского элемента управления. Ссылка ParmesanCodice в его комментарии показывает подобное явление.
Coxy 13.10.2009 23:50:57
Weird. Я предполагаю, что я сделал это только с формами, которые происходят от форм, которые рисуют свой собственный фон, так что технически метка выбирает фон своего родителя и выглядит нормально.
Matt Hamilton 15.10.2009 01:54:28
1 ОТВЕТ

Вы можете иметь прозрачные метки в .NET.
Прочтите эту статью в CodeProject о том, как использовать прозрачные изображения и метки в Windows Forms.

Что касается вашей проблемы с рисованием, у Calibri нет собственного размера шрифта 10. Вы можете проверить это в Панели управления-> Шрифты. Наименьший размер родного шрифта составляет 12 (по крайней мере, на моей машине). Измените размер от 12 до 12, и вы увидите, что это намного лучше.

Если вы не используете родные размеры шрифтов где-то под капотом, Windows / .NET / GDI + будет пытаться масштабировать шрифт для вас. Это масштабирование, скорее всего, вызывает вашу проблему.

2
13.10.2009 09:13:03
Спасибо за информацию, но Calibri отлично выглядит в Word на 10 пунктов и все еще уродлив в моем приложении на 12 пунктов. Как шрифт истинного типа, он должен иметь возможность рендеринга в любом размере, не будучи уродливым, как в моем макете.
Coxy 14.10.2009 00:29:12
Да, я понимаю ваше разочарование. У нас была похожая проблема с Courier New (также шрифтом истинного типа) в расширенном текстовом поле. Вы пробовали это в размере 12? Также помните, что весьма вероятно, что Word / Photo Shop / и т. Д. Более «умны» при изменении размера шрифтов ...
ParmesanCodice 14.10.2009 06:52:59
Да, я попробовал в своем приложении размер 12 пт. Я думаю, что это проблема ClearType.
Coxy 15.10.2009 02:11:50