netlib.narod.ru | < Назад | Оглавление | Далее > |
В главе 5 показано, как свойства SmoothingMode и PixelOffsetMode класса Graphics позволяют устранять контурные неровности при рисовании линий и кривых. Windows также позволяет управлять сглаживанием при выводе текста на экран. Эту функциональность можно включить, установив флажок Smooth Edges Of Screen Fonts (Сглаживать неровности экранных шрифтов) на вкладке Effects (Эффекты) диалогового окна Display Properties (Свойства экрана).
Можно также переопределить пользовательскую настройку, установив свойство TextRenderingHint класса Graphics:
Свойства Graphics (выборочно)
Тип | Свойство | Доступ |
TextRenderingHint | TextRenderingHint | Чтение/запись |
TextRenderingHint — это перечисление, определенное в пространстве имен System.Drawing.Text.
Перечисление TextRenderingHint
Член | Значение | Описание |
SystemDefault | 0 | По умолчанию |
SingleBitPerPixelGridFit | 1 | Без сглаживания, с подгонкой под координатную сетку |
SingleBitPerPixel | 2 | Без сглаживания, без подгонки под координатную сетку |
AntiAliasGridFit | 3 | Со сглаживанием, с подгонкой под координатную сетку |
AntiAlias | 4 | Со сглаживанием, без подгонки под координатную сетку |
ClearTypeGridFit | 5 | ClearType для жидкокристаллических мониторов |
ClearType — технология, аналогичная устранению контурных неровностей, но использующая особенности размещения цветных точек в жидкокристаллических дисплеях1.
Следующая программа демонстрирует использование всех шести значений перечисления.
AntiAliasedText.cs
//------------------------------------------------ // AntiAliasedText.cs (C) 2001 by Charles Petzold //------------------------------------------------ using System; using System.Drawing; using System.Drawing.Text; using System.Windows.Forms; class AntiAliasedText: PrintableForm { public new static void Main() { Application.Run(new AntiAliasedText()); } public AntiAliasedText() { Text = "Anti-Aliased Text" ; Font = new Font("Times New Roman", 12); } protected override void DoPage(Graphics grfx, Color clr, int cx, int cy) { Brush brush = new SolidBrush(clr); string str = "A "; int cxText = (int) grfx.MeasureString(str, Font).Width; for (int i = 0; i < 6; i++) { grfx.TextRenderingHint = (TextRenderingHint)i; grfx.DrawString(str, Font, brush, i * cxText, 0); } } }
Программа выводит прописную букву A шесть раз, используя шесть значений TextRenderingHint. Вы можете скопировать это изображение в буфер обмена, нажав Ait + Print Scrn, затем вставить изображение в графический редактор и увеличить его:
В зависимости от параметров вашего дисплея первое значение (SystemDefault) будет соответствовать либо второму (SingleBitPerPixelGridFit), либо четвертому (AntiAlias), либо, если вы используете шрифты ClearType на жидкокристаллическом мониторе, первое значение будет соответствовать шестому (ClearTypeGridFit). Ни второе, ни третье значения перечисления (SingleBitPerPixel) не сглаживают текста. Заметьте, что в третьей букве А несколько пустых пикселов. Преобразователь шрифтов в растровый формат применяет более строгие критерии для определения того, должен ли пиксел быть окрашен.
Четвертый и пятый образцы (AntiAliasGridFit) используют сглаживание. Пикселы окрашиваются в оттенки серого цвета с разной интенсивностью в зависимости от степени удаленности от теоретического контура знака.
При использовании ClearTypeGridFit пикселы слева и справа от штрихов окрашиваются в разные цвета в зависимости от расположения цветных точек по горизонтали на жидкокристаллических мониторах. Не применяйте ClearType на обычных мониторах. Некоторые жидкокристаллические мониторы позволяют пользователю поворачивать экран на 90° и работать с ним в портретном режиме. ClearType при этом работать не будет.
1 Об этой технологии время от времени вспоминают на протяжении последних двадцати лет. См. обсуждение этой технологии и ее истории на сайте Стива Гибсона: http://grc.com/cleartype.htm.
netlib.narod.ru | < Назад | Оглавление | Далее > |