如何在Compact Framework上使用ClearType和双缓冲?

时间:2009-07-27 12:37:17

标签: compact-framework gdi+ antialiasing cleartype

当我将字符串绘制到缓冲区时,结果输出不会像我期望的那样消除锯齿。这段代码说明了这个问题......把它放在标准的智能设备项目的Form1.cs中:

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

另一方面,如果我只是将字符串绘制到使用PaintEventArgs传入的Graphics对象中,它就像我期望的那样以ClearType呈现。

我想我必须以一种使用字体平滑的方式创建我的图形缓冲区,但我没有办法做到这一点。

3 个答案:

答案 0 :(得分:3)

原来是一个简单的问题。删除PixelFormat.Format32bppRgb它工作正常。看起来你需要确保你的缓冲区具有相同的像素格式...

答案 1 :(得分:0)

设置Graphics对象的SmoothingMode属性:

g.SmoothingMode = SmoothingMode.AntiAlias;

答案 2 :(得分:0)

您将不得不使用gdiplus.dll(此处存在一些包装),但它仅适用于Windows Mobile 6 Professional(非标准版)。