Как передать обрезанное изображение между формами в приложении Winform на C#?

0

Вопрос

Я работаю над настольным приложением contact manager в C# Windows forms и в настоящее время пытаюсь добавить функцию обрезки изображений аватаров. Изображение передается из одной формы в другую без каких-либо проблем. Однако изображение после обрезки не передается обратно в форму входа в систему, что бы я ни делал. Я пытался изменить изображение в форме входа в систему, перегрузив конструктор и создав новый объект при обрезке изображения. Однако я получаю такую ошибку:

Система.Исключение ArgumentOutOfRangeException: „Параметр должен быть положительным и (Параметр "y")”

Исключение возникает в строке "Цвет pxlColor".

Метод обрезки, при котором создается обрезанное изображение:

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

Изображение корректно отображается в поле pictureBox2.Image. Конструктор из формы входа в систему:

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

Я уже провел некоторые исследования в этом вопросе и выяснил, что вышеупомянутая ошибка может быть вызвана различными размерами полей изображения. После выравнивания их размера на изображении pictureBoxProfileImage возникло значение NullObjectReference.Изображение = это.Обрезанная картинка;' строка.

Исключение System.NullReferenceException: „Ссылка на объект не установлена на экземпляр объекта”.

Я попытался передать как растровые, так и графические переменные, результат в обеих ситуациях одинаков. Любая помощь будет оценена по достоинству.

Твое здоровье, Филип

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

Лучший ответ

0

Я перестроил некоторые вещи, теперь все совершается в одной форме. Обрезанное изображение заменяет первоначально опубликованное, которое публикуется с помощью приведенного ниже метода:

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

Проблема в том, что при сохранении изображения при попытке регистрации с помощью функции ниже:

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

изображение равно нулю, несмотря на то, что оно правильно отображается. Должен ли я каким-то образом заменить исходное изображение (перезаписать)?

2021-11-13 18:55:35

Есть идеи, как этого добиться @Steeeve ?
Filip

На других языках

Эта страница на других языках

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