2009-04-08 5 views
0

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

В Win32-land я бы создал шрифт с 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 выходят прямо из исходного кода, поэтому я счастлив, что они верны)

ответ

1

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

gr.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit 
+0

Спасибо! Это решение избавило меня от многих неприятностей. Мои ранее супер-нечеткие шрифты выглядят великолепно сейчас :) – ChandlerPelhams

0

Я знаю, что это не о битовой карте, но я искал решения для моей проблемы и вышел с этим 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); 
    } 
} 

Возможно, кто-нибудь найдет i t полезный