2009-04-08 81 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 defs直接來自框架源,所以我很高興他們是正確的)

回答

1

原來我看錯了地方,而且你不能用這種方式更改GDI +字體渲染,相反,你需要設置TextRenderingHint財產上的圖形對象,像這樣:

gr.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit 
+0

謝謝!這個解決方案爲我節省了很多麻煩。我以前超級模糊的字體現在看起來很棒:) – ChandlerPelhams 2011-11-22 01:27:20

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); 
    } 
} 

也許有人會發現我t很有用