Come sovrascrivere l'immagine originale con versione ritagliata di questa immagine, in applicazione desktop c#

0

Domanda

Sto costruendo c# contact manager applicazione desktop in cui è possibile scegliere un avatar con un immagine dal file e poi ritagliare. L'immagine originale viene correttamente visualizzato dopo il ritaglio, in sostituzione dell'originale. Tuttavia, al momento del tentativo di registrare l'account l'immagine sembra essere Null con un errore:

Sistema.ArgumentNullException: "il Valore non può essere null. (Parametro 'encoder')”

Il metodo per il caricamento di un'immagine alla pagina di registrazione:

        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);
            }
        }

Il metodo per il ritaglio dell'immagine:

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;
        }

Ecco la linea dove si verifica l'errore durante il salvataggio dell'immagine:

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

Vale la pena ricordare che il registro funziona correttamente se l'immagine originale è passata. Devo sostituire in qualche modo (a sostituire il file originale con il ritagliata uno)?

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

Migliore risposta

1

La mia ipotesi è che l'errore si verifica a causa di pictureBoxProfileImage.Image.RawFormat. Appena sostituito pictureBoxProfileImage.Imagema cosa rawFormat fa un new Bitmap(...) hanno? Mentre non riesco a trovare documentazione a riguardo, direi che non ha alcun valido rawFormat a tutti.

Così vorrei provare a sostituirlo con qualcosa di simile ImageFormat.Pngo salvare il rawFormat da bitmap originale di salvataggio.

2021-11-15 13:51:04

In altre lingue

Questa pagina è in altre lingue

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