Как использовать ClearType с двойной буферизацией на Compact Framework?

Когда я рисую строку в буфере, результирующий вывод не сглаживается так, как я ожидал. Этот код иллюстрирует проблему ... просто поместите это в стандартный проект смарт-устройства 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);
}

С другой стороны, если я просто нарисую строку в объекте Graphics, который был передан с PaintEventArgs, она отобразится в ClearType так, как я ожидал.

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


person Hugh    schedule 27.07.2009    source источник


Ответы (3)


Оказалось, это была простая проблема. Удалив PixelFormat.Format32bppRgb, все заработало. Похоже, вам нужно убедиться, что ваши буферы имеют одинаковые форматы пикселей ...

person Hugh    schedule 27.07.2009

Установите свойство SmoothingMode вашего объекта Graphics:

g.SmoothingMode = SmoothingMode.AntiAlias;
person MusiGenesis    schedule 27.07.2009
comment
Я как-то сомневаюсь, что это доступно на CF. - person leppie; 27.07.2009

Вам придется использовать gdiplus.dll (для этого существует несколько оболочек), но он доступен только в Windows Mobile 6 Professional (не Standard).

person leppie    schedule 27.07.2009