Cómo sobrescribir la imagen original con la versión recortada de esta imagen en c# aplicación de escritorio

0

Pregunta

Estoy edificio c# póngase en contacto con el administrador de la aplicación de escritorio donde se puede elegir una imagen de avatar de el archivo y luego recortar. La imagen original se muestra correctamente después de la cosecha, en sustitución de la original. Sin embargo, más tarde, al intentar registrar la cuenta de que la imagen parece ser Nula con un error que se muestra:

Sistema.ArgumentNullException: "el Valor no puede ser nulo. (Parámetro 'encoder')"

El método para cargar una imagen a la página de registro:

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

El método de recorte de la imagen:

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

Esta es la línea donde se produce el error al guardar la imagen:

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

Vale la pena mencionar que el registro funcione correctamente si la imagen original es que se pasa. Debo reemplazar con ellos de alguna manera (sobrescribir el original con la recortada uno)?

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

Mejor respuesta

1

Mi conjetura es que el error se produce debido a pictureBoxProfileImage.Image.RawFormat. Usted acaba de reemplazar pictureBoxProfileImage.Imagepero ¿qué hace un rawFormat new Bitmap(...) tienen? Aunque no puedo encontrar ninguna documentación al respecto, me imagino que no tiene ningún tipo de validez rawFormat a todos.

Así que me gustaría tratar de reemplazarlo con algo como ImageFormat.Pngo guardar el rawFormat desde el mapa de bits original para usar al guardar.

2021-11-15 13:51:04

En otros idiomas

Esta página está en otros idiomas

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