Dans mon formulaire, j'ai une image. Je voulais être capable de dessiner des flèches sur une image. J'ai réussi à arriver à mi-chemin là. Dans l'événement de chargement de formulaire, j'assigne une image à la zone d'image. Je suis capable de créer des flèches avec le code ci-dessous. Le problème est que chaque fois que je crée la flèche, l'image que j'ai affectée à mon événement de chargement de formulaire est effacée. Pourquoi mon image est-elle effacée? Comment puis-je conserver l'image que j'ai affectée au chargement du formulaire tout en dessinant des flèches au-dessus?Conserver une image Picturebox pendant que vous la peignez
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 Test_Load(object sender, EventArgs e)
{
pictureBox1.Image = Properties.Resources.background;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (isMoving)
{
if (pictureBox1.Image == null)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
}
pictureBox1.Image = bmp;
}
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
g.Clear(pictureBox1.BackColor);
AdjustableArrowCap bigArrow = new AdjustableArrowCap(5, 5);
_Pen = new Pen(Color.IndianRed, 3);
_Pen.CustomEndCap = bigArrow;
g.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;
}
Je pense que le problème est avec cette ligne ici g.Clear(pictureBox1.BackColor);
Salut Sakura, cela a fonctionné. Je vous remercie! Cela préserve l'image d'arrière-plan et dessine des flèches, mais savez-vous pourquoi l'image de la vignette n'est pas égale à la flèche dessinée au-dessus de l'image de fond? La façon dont j'ai testé cela a été de mettre un autre contrôle de la boîte à images dans mon formulaire et j'ai juste écrit 'picturebox2.image = picturebox1.image' et il n'affichait que mon image de fond. – taji01
Modifiez 'if (pictureBox1.Image == null)' en if ((expéditeur en tant que PictureBox) .Image == null) '. De toute façon, je ne comprends pas clairement votre commentaire. Si possible, éditez votre question avec un nouveau code et je verrai si je peux aider – Sakura
Salut Sakura, j'ai posé la question ici plus en détail avec des tests que j'ai courus. https://stackoverflow.com/questions/46592322/paint-drawline-image-into-picturebox-image – taji01