Jak przekazać przycięty obraz między formami w aplikacji Winform na C#?

0

Pytanie

Pracuję nad aplikacją contact manager w C# Windows forms i obecnie staram się dodać funkcję przycinania zdjęć awatarów. Obraz jest przenoszony z jednej formy w drugą, bez żadnych problemów. Jednak obraz po przycięciu nie jest przekazywana z powrotem do formularza logowania, co robię. Próbowałem zmienić obraz w formularzu logowania, перегрузив konstruktor i tworząc nowy obiekt podczas przycinania obrazu. Jednak pojawia się taki błąd:

System.Wyjątek ArgumentOutOfRangeException: "Parametr musi być dodatni i (Parametr "y")"

Wyjątek występuje w wierszu "Kolor pxlColor".

Metoda przycinania, w którym tworzony jest przycięty obraz:

        private void button_Crop_Image_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.Default;
            Bitmap bitmap2 = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            pictureBox1.DrawToBitmap(bitmap2, pictureBox1.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);
                }
            }

            pictureBox2.Image = (Image)croppedImage;

            Login_Register_Form login = new Login_Register_Form(croppedImage);

            pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
        }

Obraz jest poprawnie wyświetlany w polu pictureBox2.Image. Konstruktor z formularza logowania:

        public Login_Register_Form(Bitmap croppedImage)
        {
            this.croppedPicture = (Image)croppedImage;
            pictureBoxProfileImage.Image = this.croppedPicture;
        }

Ja już przeprowadził jakieś badania w tej sprawie i okazało się, że wyżej wymieniony błąd może być spowodowany różnymi rozmiarami pól obrazu. Po wyrównaniu ich wielkości na obrazie pictureBoxProfileImage powstało wartość NullObjectReference.Obraz = to.Przycięte zdjęcie;' wiersz.

Wyjątek System.NullReferenceException: "Odwołanie do obiektu nie jest zainstalowany na wystąpienie obiektu".

Starałem się przekazać jak rastrowych, jak i graficzne zmiennych, wynik w obu sytuacjach jest jednakowy. Każda pomoc bardzo się przyda.

Twoje zdrowie, Philip

c# crop winforms
2021-11-13 13:02:55
1

Najlepsza odpowiedź

0

Ja przebudował kilka rzeczy, teraz wszystko odbywa się w jednej formie. Przycięty obraz zastępuje pierwotnie opublikowane, która jest publikowana za pomocą poniższej metody:

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

Problem w tym, że podczas zapisywania obrazu podczas próby rejestracji za pomocą funkcji poniżej:

pictureBoxProfileImage.Image.Save(picture, pictureBoxProfileImage.Image.RawFormat);

obraz jest równa zero, mimo, że jest poprawnie wyświetlany. Czy muszę w jakiś sposób zastąpić oryginalny obraz (zastąpić)?

2021-11-13 18:55:35

Jakieś pomysły, jak to osiągnąć @Steeeve ?
Filip

W innych językach

Ta strona jest w innych językach

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