2009-07-27 69 views
2

當我將一個字符串繪製到一個緩衝區中時,得到的輸出不會按照我期望的方式消除鋸齒。此代碼說明了這個問題......只是把這個在一個標準的智能設備項目的Form1.cs中:如何在Compact Framework上使用雙緩衝區的ClearType?

protected override void OnPaint(PaintEventArgs e) 
{ 
    Bitmap buffer = new Bitmap(Width, Height, PixelFormat.Format32bppRgb); 
    using(Graphics g = Graphics.FromImage(buffer)) 
    { 
    g.Clear(Color.White); 
    g.DrawString("Hello, World", Font, new SolidBrush(Color.Black), 5, 5); 
    } 
    e.Graphics.DrawImage(buffer, 0, 0); 
} 

在另一方面,如果我只是畫串入Graphics對象,它是與PaintEventArgs傳遞,它就像我所期望的那樣在ClearType中呈現。

我想我必須創建我的圖形緩衝區的方式,使它使用字體平滑,但我沒有看到一種方式來做到這一點。

回答

3

原來是一個簡單的問題。通過刪除PixelFormat.Format32bppRgb它工作得很好。看起來像你需要確保你的緩衝區具有相同的像素格式...

0

設置你的顯卡的SmoothingMode屬性對象:

g.SmoothingMode = SmoothingMode.AntiAlias; 
+1

我以某種方式懷疑這是可用的CF. – leppie 2009-07-27 12:43:14

0

你將不得不使用gdiplus.dll的(存在於這幾個包裝),但它只能在Windows Mobile 6專業版(不標準)。