Dans mon formulaire, j'ai 2 contrôles picturebox
. J'ai chargé une image de fond bleu sur pictureBox1
et laissé pictureBox2
contrôle seul. Avec le code ci-dessous, je suis capable de dessiner des flèches sur mon image picturebox1
.Peinture Drawline Image dans l'image Picturebox
Objectif: Sur mon événement pictureBox1_MouseUp
Je veux ajouter toutes les flèches que je tirais sur pictureBox1
à pictureBox2
.
Problème: Le problème est sur mon événement pictureBox1_MouseUp
quand j'ai écrit pictureBox2.Image = pictureBox1.Image
ne pas ajouter la flèche peinte que je dessinais sur pictureBox1. Il ajoute uniquement l'image pictureBox1 que j'ai affectée dans mon événement de chargement de formulaire.
private bool isMoving = false;
private Point mouseDownPosition = Point.Empty;
private Point mouseMovePosition = Point.Empty;
private List<Tuple<Point, Point>> lines = new List<Tuple<Point, Point>>();
Pen _Pen;
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (isMoving)
{
if (pictureBox1.Image == null) e.Graphics.Clear(Color.White);
// Add this line for high quality drawing:
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
AdjustableArrowCap bigArrow = new AdjustableArrowCap(5, 5);
_Pen = new Pen(Color.IndianRed, 3);
_Pen.CustomEndCap = bigArrow;
e.Graphics.DrawLine(_Pen, mouseDownPosition, mouseMovePosition);
_Pen.Dispose();
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
isMoving = true;
mouseDownPosition = e.Location;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (isMoving)
{
mouseMovePosition = e.Location;
pictureBox1.Invalidate();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (isMoving)
{
lines.Add(Tuple.Create(mouseDownPosition, mouseMovePosition));
}
isMoving = false;
pictureBox2.Image = pictureBox1.Image;
}
Test 1: (Changé Code pictureBox1_Paint)
Avec ce code, il dessine la flèche sur pictureBox2, mais on dirait qu'il dessine plusieurs flèches.
if (isMoving)
{
if (pictureBox1.Image == null) e.Graphics.Clear(Color.White);
// Add this line for high quality drawing:
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
AdjustableArrowCap bigArrow = new AdjustableArrowCap(5, 5);
_Pen = new Pen(Color.IndianRed, 3);
Bitmap BitImg = (Bitmap)pictureBox1.Image;
_Pen.CustomEndCap = bigArrow;
using (var graphics = Graphics.FromImage(BitImg))
{
graphics.DrawLine(_Pen, mouseDownPosition, mouseMovePosition);
}
pictureBox1.Image = BitImg;
_Pen.Dispose();
}
Test 2:. (Je pris le code de l'événement de peinture et collé, il MouseMove événement avec quelques modifications Cette utilise trop de mémoire et il ne tire pas sur pictureBox1 mais la flèche est maintenant visible dans pictureBox2)
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (isMoving)
{
mouseMovePosition = e.Location;
if (isMoving)
{
AdjustableArrowCap bigArrow = new AdjustableArrowCap(5, 5);
_Pen = new Pen(Color.IndianRed, 3);
BitImg = new Bitmap(pictureBox1.Image);
_Pen.CustomEndCap = bigArrow;
using (var graphics = Graphics.FromImage(BitImg))
{
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.DrawLine(_Pen, mouseDownPosition, mouseMovePosition);
}
_Pen.Dispose();
}
pictureBox1.Invalidate();
}
}
Excellente explication! Cela fonctionne très bien. Je vous remercie! – taji01
Content de t'aider! – Sakura