使用 C# 和 GDI+ 绘制美国国旗






4.81/5 (17投票s)
本文展示了如何使用 C# 和 GDI+ 绘制图形对象
引言
Visual C# 提供了一个强大的 GDI+ 类库接口,允许用户绘制各种图形对象。
本文向您展示如何使用 C# 和 GDI+ 创建美国国旗。美国国旗包含 50 个星形多边形和几个矩形。
背景
多边形是我们处理 2D 和 3D 图形渲染或处理计算几何时最重要的图形对象之一。 Graphics.DrawPolygon
方法绘制由点结构数组定义的多边形。数组中每两个连续的点指定多边形的一条边。
在这里,我将向您展示如何创建一个美国国旗对象。 首先,我们需要定义星形的坐标。 如下图所示,假设星形的中心坐标为 (xc, yc),r1 为内圆的半径,r 为外圆的半径。 角度 a = 72 度,ß = 36 度。

从这张图中,我们可以很容易地确定点 0 到 9 的坐标,如下表所示
Points | x 坐标 | y 坐标 |
0 | xc | yc – r |
1 | xc + r1 sinß | yc – r1 cosß |
2 | xc + r sina | yc – r cosa |
3 | xc + r1 sina | yc + r1 cosa |
4 | xc + r sinß | yc + r cosß |
5 | xc | yc + r1 |
6 | xc – r sinß | yc + r cosß |
7 | xc – r1 sina | yc + r1 cosa |
8 | xc – r sina | yc – r cosa |
9 | xc – r1 sinß | yc – r1 cosß |
我们首先实现一个 DrawStar
方法,用于在中心位置 (xc, yc) 绘制单个星形多边形,并使用大小控制参数 r(外圆的半径,如上图所示)。然后,我们添加一个 DrawFlag
方法,该方法首先在白色矩形背景上绘制七个红色条纹。 请注意,通过设置来维护国旗的比例
float height = 10 * width / 19;
然后,该方法绘制具有适当大小的蓝色矩形。 最后,我们通过调用 DrawStar
方法将五十颗星星均匀地放置在蓝色矩形上,以完成该项目。
Using the Code
美国国旗实际上是通过覆盖 Form1
类的 OnPaint
方法来绘制的
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;
DrawFlag(g, 20, 20, this.Width - 50);
g.Dispose();
}
构建并运行此项目会生成以下屏幕截图

这只是为了好玩,甚至可能有用。 这个项目来自新书“Practical C# Charts and Graphics”中的示例,您可以在其中找到更高级的图表和图形编程,以用于实际的 .NET 应用程序。 有关更多信息,请访问 我的网站。
关于作者
Jack Xu 博士拥有理论物理学博士学位。 他在 Basic、Fortran、C、C++、Matlab 和 C# 方面拥有超过 15 年的编程经验,专注于数值计算方法、算法、物理建模、计算机辅助设计 (CAD) 开发、图形用户界面和 3D 图形。 目前,他负责开发基于 Microsoft .NET Framework 的商业 CAD 工具。
请阅读我的其他文章