2013-06-20 4 views
0

Мне нужно создать простую графику в форме Windows с помощью C#. Простыми я имею в виду строки, круги и т. Д. Однако, когда я рисую, например, заполненный круг, край не является гладким (как и ожидалось при рисовании круга с использованием квадратных пикселей), но при рисовании одного круга с тем же числом пикселей в векторной программе он выглядит идеально. В этом примере я рисую Inkscape.Хорошо выглядящая графика в форме окна C#

Возможно, векторное программное обеспечение использует какую-то функцию рендеринга, чтобы сгладить цвета, но возможно ли это на C#, не создавая слишком много кода? Вот пример кода, который использует Graphics, чтобы создать холст, на котором можно рисовать.

private void StatGraphicsPanel_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics canvas = e.Graphics; 
    Brush brush = Brushes.Aqua; 
    canvas.FillEllipse(brush, 0, 0, 10, 10); 
} 

Решение Этот код делает трюк:

private void StatGraphicsPanel_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics canvas = e.Graphics; 
    canvas.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
    Brush brush = Brushes.Aqua; 
    canvas.FillEllipse(brush, 0, 0, 10, 10); 
} 
+0

Показать код или мы не можем вам помочь. – gunr2171

+3

Я бы пошел с [WPF] (http://en.wikipedia.org/wiki/Windows_Presentation_Foundation), а не WinForms ... – Sam

+2

попробуйте выполнить поиск в документе, если ваши графические объекты имеют какое-либо свойство сглаживания, если они установили его true –

ответ

8

Вы хотите использовать System.Drawing.Graphics.SmoothingMode свойство. Перед тем как начать использовать свой Graphics объект, сделайте следующее:

canvas.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 

Это должно дать вам хорошее сглаживание эллипса вместо Jaggy один по умолчанию.

Аналогичным образом, если вы хотите нарисовать высококачественный текст на изображении, используйте System.Drawing.Graphics.TextRenderingHint.

Как уже упоминалось в комментариях, вы можете использовать WPF вместо этого. WinForms датированы.

+1

Хотя настройка 'SmoothingMode' на' HighQuality' (или 'AntiAlias') может вызвать перетащить производительность ... – Sam

+0

@Timothy Shields: Я просто добавил решение раньше ваш пост, но это прекрасно делает трюк. Производительность здесь не проблема. Спасибо, в любом случае. – rasole