Click here to Skip to main content
Click here to Skip to main content

Draw a US Flag using C# and GDI+

, 7 Dec 2007 CPOL
Rate this:
Please Sign up or sign in to vote.
This article shows how to draw graphics objects using C# and GDI+

Introduction

Visual C# provides a powerful GDI+ class library interface that allows users to draw various graphics objects.

This article shows you how to create a US flag using C# and GDI+. The US flag contains 50 star polygons and several rectangles.

Background

Polygon is one of the most important graphics objects we are dealing with when rendering 2D and 3D graphics or processing computational geometry. Graphics.DrawPolygon method draws a polygon defined by an array of point structures. Every pair of two consecutive points in the array specifies a side of the polygon.

Here, I will show you how to create a US flag object. First we need to define the coordinates of a star. As illustrated in the following figure, suppose that the center coordinates of the star are at (xc, yc), r1 is the radius of the inner circle, and r is the radius of the outer circle. The angles a = 72 degrees and ß = 36 degrees.

From this figure, we can easily determine the coordinates of points 0 to 9, as listed in the following table:

Points x coordinates y coordinates
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ß

We first implement a DrawStar method to draw a single star polygon at the center position (xc, yc) with a size control parameter r (the radius of the outer circle, as shown in the above figure). We then add a DrawFlag method that first draws seven red strips on a white rectangle background. Note that the respect ratio of the flag is maintained by setting:

float height = 10 * width / 19;

The method then draws the blue rectangle with proper size. Finally we put fifty stars on the blue rectangle uniformly by calling the DrawStar method to finish the project.

Using the Code

The US flag is really drawn by overriding the OnPaint method of the Form1 class:

protected override void OnPaint(PaintEventArgs e)
{
    Graphics g = e.Graphics;
    g.SmoothingMode = SmoothingMode.AntiAlias;
    DrawFlag(g, 20, 20, this.Width - 50);
    g.Dispose();
}

Building and running this project produces the following screenshot:

This is just for fun, perhaps even useful. This project is from the examples of the new book "Practical C# Charts and Graphics", where you can find more advanced chart and graphics programming for real-world .NET applications. For more information, please visit my website.

About the Author

Dr. Jack Xu has a Ph.D in theoretical physics. He has over 15 years programming experience in Basic, Fortran, C, C++, Matlab, and C#, specializing in numerical computation methods, algorithms, physical modeling, computer-aided design (CAD) development, graphics user interface, and 3D graphics. Currently, he is responsible for developing commercial CAD tools based on Microsoft .NET Framework.

Please read my other articles:

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Jack J. H. Xu

United States United States
No Biography provided

Comments and Discussions

 
Questiongreat Pinmemberazimi632317-Apr-14 21:23 
Questionis this... PinmemberGiuseppe Tollini14-Aug-13 0:41 
GeneralMy vote of 5 Pinmembermanoj kumar choubey18-Feb-12 3:20 
QuestionDrawing Sine Waves Pinmembervinaykskvs4-Jun-08 2:51 
QuestionHow does a graphics object representing a flag relate to 'the flag' ? PinmemberOrlandoCurioso7-Dec-07 12:39 
GeneralEasier way to compute the star points PinmemberWyld_One14-Nov-07 21:32 
GeneralHelp in graphics programming needed !! PinmemberLalito8019-Jun-07 4:51 
GeneralNICE Pinmembermichael_rost11-Jun-07 9:07 
GeneralYour book looks great - I need to order it ASAP PinmemberEric Engler2-Apr-07 10:26 
GeneralRe: Your book looks great - I need to order it ASAP PinmemberJack JH Xu2-Apr-07 11:53 
GeneralRe: Your book looks great - I need to order it ASAP PinmemberEric Engler2-Apr-07 12:16 
GeneralRe: Your book looks great - I need to order it ASAP PinmemberPaul Selormey22-Apr-07 18:03 
GeneralRe: Your book looks great - I need to order it ASAP PinmemberJack JH Xu23-Apr-07 9:33 
GeneralRe: Your book looks great - I need to order it ASAP PinmemberMichael Sync1-Aug-07 21:50 
GeneralRe: Your book looks great - I need to order it ASAP PinmemberEric Engler6-Aug-07 5:19 
GeneralMore generic function for drawing a star PinmemberDigitalKing26-Mar-07 19:10 
GeneralRe: More generic function for drawing a star PinmemberPaul Selormey26-Mar-07 20:14 
GeneralRe: More generic function for drawing a star PinmemberJack JH Xu26-Mar-07 20:54 
GeneralRe: More generic function for drawing a star PinmemberPaul Selormey26-Mar-07 21:03 
GeneralRe: More generic function for drawing a star PinmemberJack JH Xu26-Mar-07 21:43 
GeneralRe: More generic function for drawing a star PinmemberPaul Selormey26-Mar-07 22:04 
GeneralRe: More generic function for drawing a star PinmemberDigitalKing26-Mar-07 21:24 
GeneralRe: More generic function for drawing a star PinmemberPaul Selormey26-Mar-07 22:02 
GeneralRe: More generic function for drawing a star PinmemberJohann Gerell26-Mar-07 20:50 
GeneralRe: More generic function for drawing a star PinmemberPaul Selormey26-Mar-07 20:56 
GeneralRe: More generic function for drawing a star PinmemberDigitalKing26-Mar-07 21:15 
GeneralYou are missing 2 stars PinmemberGerard Nicol26-Mar-07 16:59 
GeneralRe: You are missing 2 stars PinmemberPaul Selormey26-Mar-07 17:06 
GeneralRe: You are missing 2 stars Pinmembergucci26-Mar-07 20:15 
JokeRe: You are missing 2 stars Pinmemberednrgc27-Mar-07 7:31 
GeneralRe: You are missing 2 stars PinmemberGreg Russell2-Apr-07 4:41 
GeneralRe: You are missing 2 stars Pinmembertec-goblin18-Jun-07 21:58 
GeneralRe: You are missing 2 stars PinmemberPavel Vladov1-Aug-07 23:26 
GeneralRe: You are missing 2 stars Pinmembertec-goblin1-Aug-07 23:32 
GeneralRe: You are missing 2 stars PinmemberMarcus Deecke22-Jun-07 13:50 
GeneralNice work... PinmemberPaul Selormey26-Mar-07 14:37 
GeneralRe: Nice work... PinmemberJack JH Xu26-Mar-07 21:17 
GeneralRe: Nice work... PinmemberPaul Selormey26-Mar-07 21:56 
GeneralRe: Nice work... PinmemberJack JH Xu29-Mar-07 9:35 
GeneralRe: Nice work... PinmemberPaul Selormey30-Mar-07 6:42 
GeneralRe: Nice work... [modified] PinmemberJack JH Xu30-Mar-07 7:49 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.141015.1 | Last Updated 7 Dec 2007
Article Copyright 2007 by Jack J. H. Xu
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid