PictureBox PaintEvent con otro método

Solo hay un cuadro de imagen en mi formulario y quiero dibujar el círculo con un método en este recuadro, pero no puedo hacerlo y no funciona. El método es:

private Bitmap Circle() { Bitmap bmp; Graphics gfx; SolidBrush firca_dis=new SolidBrush(Color.FromArgb(192,0,192)); bmp = new Bitmap(40, 40); gfx = Graphics.FromImage(bmp); gfx.FillRectangle(firca_dis, 0, 0, 40, 40); return bmp; } 

Cuadro de imagen

  private void pictureBox2_Paint(object sender, PaintEventArgs e) { Graphics gfx= Graphics.FromImage(Circle()); gfx=e.Graphics; } 

Debes decidir lo que quieres hacer:

  • Dibuja en la imagen o
  • dibujar en el Control ?!

¡Tu código es una mezcla de ambos, y es por eso que no funciona …!

Aquí está cómo dibujar sobre el Control :

 private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawEllipse(Pens.Red, new Rectangle(3, 4, 44, 44)); .. } 

Aquí está cómo dibujar en la Image de PictureBox ::

 void drawIntoImage() { using (Graphics G = Graphics.FromImage(pictureBox1.Image)) { G.DrawEllipse(Pens.Orange, new Rectangle(13, 14, 44, 44)); .. } // when donw with all drawing you can enforce the display update by calling: pictureBox1.Refresh(); } 

Ambas formas de dibujar son persistentes. Este último cambia a píxeles de la Imagen, el primero no.

Por lo tanto, si los píxeles se dibujan en la imagen y se amplía, estira o desplaza la imagen, el píxel irá con ella. ¡Los píxeles dibujados en la parte superior del control PictureBox no harán eso!

Por supuesto, para ambas formas de dibujar, puede alterar todas las partes habituales, como el comando de dibujo, tal vez agregar un FillEllipse antes del DrawEllipse , los Pens y Brushes con su tipo de pincel y Colors y las dimensiones.

 private static void DrawCircle(Graphics gfx) { SolidBrush firca_dis = new SolidBrush(Color.FromArgb(192, 0, 192)); Rectangle rec = new Rectangle(0, 0, 40, 40); //Size and location of the Circle gfx.FillEllipse(firca_dis, rec); //Draw a Circle and fill it gfx.DrawEllipse(new Pen(firca_dis), rec); //draw a the border of the cicle your choice }