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 :
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;
            }
        }
rec étant un rectangle que j'ai créé.
La taille de ce rectangle est variable et dépend des fonctions Mouse_Down et Mouse_Up du panel :
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);
            }
        }
La création du rectangle fonctionne, quelque que soit le sens de la sélection (d'en bas à gauche à en haut à droite, etc...).
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 : Nom : jardins dieu.jpg
Affichages : 112
Taille : 149,5 Ko Image que je veux save
Nom : lol.png
Affichages : 104
Taille : 76,8 Ko Image sauvegardée si j'encadre l'image avec le rectangle
Nom : lol2.png
Affichages : 106
Taille : 238 octets Image sauvegardée si j'encadre un espace vide

Voici le code de la sauvegarde :
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);
                }
            }
        }
Le first_save n'influence pas le fonctionnement.

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 :/