Bonjour,
afin de pouvoir sauvegarder une ou plusieurs images préalablement ouvertes dans un panel, je crée un rectangle avec la fonction Paint comme suit :
rec étant un rectangle que j'ai créé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private void panel1_Paint(object sender, PaintEventArgs e) { if (autorisation == true) { Pen stylonoir = new Pen(Brushes.Black); stylonoir.Width = 1; e.Graphics.DrawRectangle(stylonoir, rec); autorisation = false; } }
La taille de ce rectangle est variable et dépend des fonctions Mouse_Down et Mouse_Up du panel :
La création du rectangle fonctionne, quelque que soit le sens de la sélection (d'en bas à gauche à en haut à droite, etc...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 private void panel1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) positionClick = e.Location; } private void panel1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { positionClick2 = e.Location; autorisation = true; if (positionClick.X > positionClick2.X) rec.Width = positionClick.X - positionClick2.X; else rec.Width = positionClick2.X - positionClick.X; if (positionClick.Y > positionClick2.Y) rec.Height = positionClick.Y - positionClick2.Y; else rec.Height = positionClick2.Y - positionClick.Y; if (positionClick.X > positionClick2.X && positionClick.Y > positionClick2.Y) rec.Location = new Point(positionClick2.X, positionClick2.Y); if (positionClick.X < positionClick2.X && positionClick.Y > positionClick2.Y) rec.Location = new Point(positionClick.X, positionClick2.Y); if (positionClick.X > positionClick2.X && positionClick.Y < positionClick2.Y) rec.Location = new Point(positionClick2.X, positionClick.Y); if (positionClick.X < positionClick2.X && positionClick.Y < positionClick2.Y) rec.Location = new Point(positionClick.X, positionClick.Y); } }
Mon problème est que, lorsque je lance la sauvegarde, celle-ci ne s'effectue pas selon les dimensions du rectangle, la taille à l'air d'être respectée mais pas sa localisation, cette dernière semblerait se positionner par rapport au Form 1, et non au panel1. Certaines fois, le contenu est totalement noir ou ne prend qu'une partie de ce que je voulais enregister, voici un exemple :Image que je veux save
Image sauvegardée si j'encadre l'image avec le rectangle
Image sauvegardée si j'encadre un espace vide
Voici le code de la sauvegarde :
Le first_save n'influence pas le fonctionnement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 private void enregistrerToolStripMenuItem_Click(object sender, EventArgs e) { if (rec.Width == 0 && rec.Height == 0) MessageBox.Show("Rien à enregistrer !", "Erreur lors de la sauvegarde", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else { Bitmap bmp = new Bitmap(rec.Width, rec.Height); if (first_save == false) { saveFileDialog1.Filter = "Fichiers Images|*.jpg*; *.png; *.bmp"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { saveFileDialog1.InitialDirectory = saveFileDialog1.FileName; panel1.DrawToBitmap(bmp, rec); bmp.Save(saveFileDialog1.InitialDirectory); first_save = true; } } else { panel1.DrawToBitmap(bmp, rec); bmp.Save(saveFileDialog1.InitialDirectory); } } }
Voilà, est-ce que vous auriez une suggestion ou une solution pour ce problème ? J'ai cherché pas mal de temps sur le net mais sans trouver grand chose :/
Partager