Cum pentru a suprascrie imaginea originală cu decupată versiune de această imagine în c# aplicație desktop

0

Problema

Eu sunt construirea c# contact manager aplicații desktop în cazul în care puteți alege un avatar imagine din fișier și, mai târziu, decupați-l. Imaginea originală este afișată corect după recoltare, o înlocuiască pe cea originală. Cu toate acestea, mai târziu, la încercarea de a înregistra contul imaginea pare a fi Nul cu o astfel de eroare este afișat:

Sistem.ArgumentNullException: "Valoarea nu poate fi null. (Parametru 'encoder')"

Metoda pentru încărcarea o imagine pagina de înregistrare:

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

Metoda pentru a decupa imaginea:

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

Aici e linia unde se produce eroare atunci când a salva imaginea:

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

Este de remarcat faptul că registrul funcționează corect dacă imaginea originală este de a fi trecut. Ar trebui să le înlocuiască într-un fel (suprascrie pe cel original cu decupată unul)?

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

Cel mai bun răspuns

1

Părerea mea este că eșecul apare ca urmare a pictureBoxProfileImage.Image.RawFormat. Ai înlocuit pictureBoxProfileImage.Imagedar ce rawFormat nu o new Bitmap(...) au? În timp ce eu nu pot găsi orice documentație despre asta, cred că nu are nici un valabile rawFormat la toate.

Așa că aș încerca să fie înlocuiți-l cu ceva de genul ImageFormat.Pngsau salva rawFormat de original bitmap pentru a utiliza atunci când salvarea.

2021-11-15 13:51:04

În alte limbi

Această pagină este în alte limbi

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