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