Comment faire pour remplacer l'image originale avec la version rognée de cette image dans une application de bureau c#

0

La question

Je suis bâtiment c# gestionnaire de contacts de l'application de bureau où vous pouvez choisir un avatar image à partir du fichier et, plus tard, de la recadrer. L'image d'origine s'affiche correctement après le recadrage, en remplacement de celui d'origine. Cependant, plus tard, lors de la tentative pour enregistrer le compte de l'image semble être Null avec une telle erreur affiché:

Système.ArgumentNullException: "la Valeur ne peut pas être null. (Paramètre 'codeur')”

La méthode pour l'upload d'une image de la page du registre:

        private void button_browse_Click(object sender, EventArgs e)
        {
            // select and display image in the picturebox
            OpenFileDialog opf = new OpenFileDialog();
            opf.Filter = "Select Image(*.jpg;*.png;*.gif)|*.jpg;*.png;*.gif";
            

            if(opf.ShowDialog() == DialogResult.OK)
            {
                pictureBoxProfileImage.Image = Image.FromFile(opf.FileName);
                setImage(pictureBoxProfileImage.Image);
            }
        }

La méthode pour le recadrage de l'image:

private void button_Select_Cropped_Area_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.Default;

            Bitmap bitmap2 = new Bitmap(pictureBoxProfileImage.Width, pictureBoxProfileImage.Height);
            pictureBoxProfileImage.DrawToBitmap(bitmap2, pictureBoxProfileImage.ClientRectangle);

            Bitmap croppedImage = new Bitmap(rectW, rectH);
            for (int x = 0; x < rectW; x++)
            {
                for (int y = 0; y < rectH; y++)
                {
                    Color pxlColor = bitmap2.GetPixel(cropX + x, cropY + y);
                    croppedImage.SetPixel(x, y, pxlColor);
                }
            }
            pictureBoxProfileImage.Image.Dispose();
            pictureBoxProfileImage.Image = (Image)croppedImage;
            pictureBoxProfileImage.SizeMode = PictureBoxSizeMode.StretchImage;
        }

Voici la ligne où l'erreur se produit lors de l'enregistrement de l'image:

MemoryStream picture = new MemoryStream();
pictureBoxProfileImage.Image.Save(picture, pictureBoxProfileImage.Image.RawFormat);

Il est intéressant de mentionner que le registre fonctionne correctement si l'image originale est en cours de transmission. Dois-je les remplacer en quelque sorte (remplacer celui d'origine avec le recadrée une)?

c# crop
2021-11-15 11:20:12
1

La meilleure réponse

1

Ma conjecture est que la défaillance se produit en raison de pictureBoxProfileImage.Image.RawFormat. Vous avez juste remplacé pictureBoxProfileImage.Imagemais ce rawFormat un new Bitmap(...) ont? Bien que je ne trouve aucune documentation à ce sujet, je pense qu'il n'a pas valable rawFormat à tous.

Je voudrais donc essayer de le remplacer par quelque chose comme ImageFormat.Pngou enregistrer la rawFormat à partir de l'image d'origine à utiliser lors de l'enregistrement.

2021-11-15 13:51:04

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................