【问题标题】:Good looking graphics in C# window formC#窗口形式的好看的图形
【发布时间】:2013-06-21 04:37:21
【问题描述】:

我需要使用 C# 在 Windows 窗体中创建一些简单的图形。简单地说,我的意思是线条,圆圈等。但是,当我画例如实心圆,边缘不平滑(正如使用方形像素绘制圆时所预期的那样),但是在矢量程序中绘制具有相同像素数的相同圆时,它看起来很完美。为了这个例子,我一直在 Inkscape 中绘图。

也许矢量软件使用某种渲染函数来平滑颜色,但是这在 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);
}

【问题讨论】:

  • 显示一些代码,否则我们无法帮助您。
  • 我会选择WPF,而不是 WinForms...
  • 尝试在文档中搜索您的图形对象是否具有某些抗锯齿属性(如果它们已将其设置为 true)
  • "(正如使用方形像素绘制圆形时所预期的那样)" 无论您使用哪种编程语言,所有形状都是由像素组成的。您需要提高形状的分辨率。或者给我看代码。
  • 您可以从 Photoshop 之类的程序中获得好看的图形。来自设计师,而不是程序员。

标签: c# graphics


【解决方案1】:

您想使用System.Drawing.Graphics.SmoothingMode 属性。在开始使用您的 Graphics 对象之前,请执行以下操作:

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

这应该会给你一个很好的抗锯齿椭圆,而不是默认的锯齿椭圆。

同样,如果您想在图像中绘制高质量的文本,请使用System.Drawing.Graphics.TextRenderingHint 属性。


正如其他人在 cmets 中提到的,您可能需要考虑改用 WPF。 WinForms 已经过时了。

【讨论】:

  • 虽然将SmoothingMode 设置为HighQuality(或AntiAlias)可能会拖累性能...
  • @Timothy Shields:我刚刚在您的帖子之前添加了解决方案,但这完美地解决了问题。性能在这里不是问题。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多