Создание не сглаженных шрифтов с помощью WinForms - PullRequest
0 голосов
/ 09 апреля 2009

У меня есть требование для создания растрового изображения, содержащего некоторые символы, отображаемые без сглаживания или ClearType.

В Win32-земле я бы создал шрифт с lfQuality, установленным в NONANTIALIASED_QUALITY, и нарисовал бы с этим.

Я попытался сделать это с WinForms следующим образом:

  using(Font smoothFont = new Font("Arial", 30, GraphicsUnit.Pixel))
  {
    LOGFONT lf = new LOGFONT();
    smoothFontToLogFont(lf);
    lf.lfQuality = NONANTIALIASED_QUALITY;
    using (Font roughFont = Font.FromLogFont(lf))
    {

Но похоже, что roughFont по-прежнему отображает текст ClearTyped.

Должен ли я отказаться от WinForms и просто сделать это в C, или я что-то здесь упускаю? (Мой класс LOGFONT и связанные с ним определения lfQuality взяты из исходного кода фреймворка, поэтому я рад, что они верны)

Ответы [ 2 ]

1 голос
/ 09 апреля 2009

Оказывается, я искал не то место, и вы не можете изменить таким образом рендеринг шрифта GDI +, вместо этого вам нужно установить свойство TextRenderingHint для вашего графического объекта, например так:

gr.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit
0 голосов
/ 27 января 2013

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

using System.Drawing;
using System.Drawing.Text;

class LabelEx : System.Windows.Forms.Label
{
    protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
    {
        e.Graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
        base.OnPaint(e);
    }
}

Может быть, кто-то найдет это полезным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...