web-dev-qa-db-fra.com

Dessiner des cercles avec System.Drawing

J'ai ce code qui dessine un rectangle (Im essayant de refaire la peinture MS)

 case "Rectangle":
               if (tempDraw != null)
                {
                    tempDraw = (Bitmap)snapshot.Clone();
                    Graphics g = Graphics.FromImage(tempDraw);
                    Pen myPen = new Pen(foreColor, lineWidth);
                    g.DrawRectangle(myPen, x1, y1, x2-x1, y2-y1);
                    myPen.Dispose();
                    e.Graphics.DrawImageUnscaled(tempDraw, 0, 0);
                    g.Dispose();
                }

Mais si je veux tracer un cercle, qu'est-ce qui va changer?

g.DrawRectangle(myPen, x1, y1, x2-x1, y2-y1);
16
Tony

Essayez plutôt la méthode DrawEllipse .

20
Stephen Wrighton

Il n'y a pas de méthode DrawCircle; utilisez DrawEllipse à la place. J'ai une classe statique avec des méthodes d'extension graphique (parmi d'autres non illustrées ici) qui dessine et remplit des cercles. Ce sont des wrappers autour de DrawEllipse et FillEllipse:

public static class GraphicsExtensions
{
    public static void DrawCircle(this Graphics g, Pen pen,
                                  float centerX, float centerY, float radius)
    {
        g.DrawEllipse(pen, centerX - radius, centerY - radius,
                      radius + radius, radius + radius);
    }

    public static void FillCircle(this Graphics g, Brush brush,
                                  float centerX, float centerY, float radius)
    {
        g.FillEllipse(brush, centerX - radius, centerY - radius,
                      radius + radius, radius + radius);
    }
}

Vous pouvez les appeler comme ça:

g.FillCircle(myBrush, center X, centerY, radius);
g.DrawCircle(myPen, centerX, centerY, radius);

Vous devrez utiliser DrawEllipse si vous souhaitez dessiner un cercle avec GDI +.

Voici un exemple: http://www.websupergoo.com/helpig6net/source/3-examples/9-drawgdi.htm

6
Michael Todd

Vous devriez utiliser DrawEllipse:

//
// Summary:
//     Draws an ellipse defined by a bounding rectangle specified by coordinates
//     for the upper-left corner of the rectangle, a height, and a width.
//
// Parameters:
//   pen:
//     System.Drawing.Pen that determines the color, width,
//      and style of the ellipse.
//
//   x:
//     The x-coordinate of the upper-left corner of the bounding rectangle that
//     defines the ellipse.
//
//   y:
//     The y-coordinate of the upper-left corner of the bounding rectangle that
//     defines the ellipse.
//
//   width:
//     Width of the bounding rectangle that defines the ellipse.
//
//   height:
//     Height of the bounding rectangle that defines the ellipse.
//
// Exceptions:
//   System.ArgumentNullException:
//     pen is null.
public void DrawEllipse(Pen pen, int x, int y, int width, int height);
4
Rubens Farias

si vous voulez dessiner un cercle sur un bouton, utilisez ce code en entier ..__ sinon, si vous voulez dessiner un cercle sur un autre contrôle, changez simplement le nom du contrôle et de l'événement. comme ici le bouton événement est appelé. si vous souhaitez dessiner ce cercle dans une zone de groupe, appelez l'événement Groupbox . Cordialement

    public Form1()
    {
        InitializeComponent();

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.button1.Location = new Point(108, 12);
       // this.Paint += new PaintEventHandler(Form1_Paint);
        this.button1.Paint += new PaintEventHandler(button1_Paint);
    }
    void button1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = this.button1.CreateGraphics();
        Pen pen = new Pen(Color.Red);
        g.DrawEllipse(pen, 10, 10, 20, 20);

    }





}
2
Malik Dilawar

Avec ce code, vous pouvez facilement dessiner un cercle ... C # est super et facile mon ami

public partial class Form1 : Form
{


public Form1()
    {
        InitializeComponent();
    }

  private void button1_Click(object sender, EventArgs e)
    {
        Graphics myGraphics = base.CreateGraphics();
        Pen myPen = new Pen(Color.Red);
        SolidBrush mySolidBrush = new SolidBrush(Color.Red);
        myGraphics.DrawEllipse(myPen, 50, 50, 150, 150);
    }
 }
1
MOKp
     private void DrawEllipseRectangle(PaintEventArgs e)
        {
            Pen p = new Pen(Color.Black, 3);
            Rectangle r = new Rectangle(100, 100, 100, 100);
            e.Graphics.DrawEllipse(p, r);
        }
     private void Form1_Paint(object sender, PaintEventArgs e)
        {
            DrawEllipseRectangle(e);
        }
0
Bokooo