Jak nadpisać oryginalny obraz obcięte wersji tego obrazu w aplikacji komputerowej c#

0

Pytanie

Tworzę aplikacja c# contact manager, w którym można wybrać avatar obraz z pliku, a następnie wyciąć go. Oryginalny obraz jest wyświetlany poprawnie po przycięciu, zastępując oryginalny obraz. Jednak później, gdy użytkownik próbuje zarejestrować konto, obraz wydaje się być puste, i pojawia się taki błąd:

System.Wyjątek ArgumentNullException: "Wartość nie może być null. (Opcja "koder")"

Sposób ładowania zdjęć na strony rejestracji:

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

Sposób przycinania obrazu:

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

Oto wiersz, w którym występuje błąd podczas zapisywania obrazu:

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

Warto zauważyć, że wielkość działa prawidłowo, jeśli jest to oryginalny obraz. Czy muszę jakoś zastąpić je (zastąpić tekst źródłowy obrzezany)?

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

Najlepsza odpowiedź

1

Zakładam, że błąd występuje pictureBoxProfileImage.Image.RawFormat. Tylko że zastąpiły pictureBoxProfileImage.Imageale jaki format sprawia, że bez leczenia new Bitmap(...) mieli? Chociaż nie mogę znaleźć żadnej dokumentacji na ten temat, wydawało mi się, że nie ma w ogóle dopuszczalnego oryginalnego formatu.

Dlatego ja bym próbował albo zastąpić go czymś w rodzaju ImageFormat.Pnglub zachowaj oryginalny rozmiar oryginalnego obrazu bitmapowego do wykorzystania podczas zapisywania.

2021-11-15 13:51:04

W innych językach

Ta strona jest w innych językach

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