Скопировать выделенную область в другой pictureBox

Всем привет! Я пытаюсь сделать следующее: в PictureBox пользователь с помощью мышки выделает область которая переносится в другой pictureBox.

У меня получился такой код:

 Point p1;
        Point p2;

        bool isClicked = false;
        private void mangaPicture_MouseDown(object sender, MouseEventArgs e)
        {
            p1 = new Point(e.Location.X, e.Location.Y);
            isClicked = true;
        }
        private void mangaPicture_MouseUp(object sender, MouseEventArgs e)
        {
            p2 = new Point(e.Location.X, e.Location.Y);

            isClicked = false;
//должно произойти перемещение в другой pictureBox
            using (var bmp = new System.Drawing.Bitmap((int)GetRect(p1,p2).Width, (int)GetRect(p1, p2).Height))
            {
                using (var graphics = System.Drawing.Graphics.FromImage(bmp))
                {
                    graphics.DrawImage(mangaPicture.Image, 0.0f, 0.0f, GetRect(p1,p2), System.Drawing.GraphicsUnit.Pixel); //строка о которой говорится ниже
                }
                pictureBox1.Image = bmp;
            }

        }
        Rectangle GetRect(Point p1, Point p2)
        {
            var x1 = Math.Min(p1.X, p2.X);
            var x2 = Math.Max(p1.X, p2.X);
            var y1 = Math.Min(p1.Y, p2.Y);
            var y2 = Math.Max(p1.Y, p2.Y);
            return new Rectangle(x1, y1, x2 - x1, y2 - y1);
        }
        private void mangaPicture_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && isClicked)
            {

                p2 = new Point(e.Location.X, e.Location.Y);
                mangaPicture.Invalidate();
            }
        }

        private void mangaPicture_Paint(object sender, PaintEventArgs e)
        {

            Pen blackPen = new Pen(Color.Black, 4);

            e.Graphics.DrawRectangle(blackPen, GetRect(p1, p2));

            blackPen.Dispose();

        }

Код работает, но не совсем: он лишь выделяет область, а при выполнении строки, рядом с которой комментарий выдаёт ошибку: неправильный параметр, в чём может быть проблема?

UPD

У меня получилось сделать так, что бы картинка переносилась в другой pictureBox без ошибки MemoryOut:

        private void mangaPicture_MouseUp(object sender, MouseEventArgs e)
        {
            p2 = new Point(e.Location.X, e.Location.Y);

            isClicked = false;
            Rectangle cloneRect = GetRect(p1, p2);
            cloneRect.Intersect(new Rectangle(0, 0, mangaPicture.Width, mangaPicture.Height));
            Bitmap bmp = new Bitmap(cloneRect.Width, cloneRect.Height);
            using (Graphics gph = Graphics.FromImage(bmp))
            {
                gph.DrawImage(mangaPicture.Image, new Rectangle(0, 0, bmp.Width, bmp.Height), cloneRect, GraphicsUnit.Pixel);
            }

            pictureBox1.Image = bmp;

        }

Но почему-то получившееся изображение не соответствует выделенному, прикрепил скриншот:

введите сюда описание изображения

UPD2 У меня получилось реализовать то, что хотел:

   private void mangaPicture_MouseUp(object sender, MouseEventArgs e)
        {
            p2 = new Point(e.Location.X, e.Location.Y);
            if (e.Location.X >= mangaPicture.Width)
            {
                p2.X = mangaPicture.Width - 5;
            }
            if (e.Location.Y >= mangaPicture.Height)
            {
                p2.Y = mangaPicture.Height - 5;
            }
            if (e.Location.X <= 0)
            {
                p2.X = 5;
            }
            if (e.Location.Y <= 0)
            {
                p2.Y = 5;
            }
            isClicked = false;
            Rectangle cloneRect = GetRect(p1, p2);
            
            cloneRect.Intersect(new Rectangle(cloneRect.X, cloneRect.Y, mangaPicture.Width, mangaPicture.Height));

            Image img = (Bitmap)CropImage(new Bitmap(mangaPicture.Image, mangaPicture.Size), cloneRect);
            pictureBox1.Image = img;

        }
      private Image CropImage(Image img, Rectangle cropArea)
        {
            try
            {
                Bitmap bmpImage = new Bitmap(img);
                Bitmap bmpCrop = bmpImage.Clone(cropArea /*your rectangle area*/, bmpImage.PixelFormat);
                return (Image)(bmpCrop);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "CropImage()");
            }
            return null;
        }

Ответы (0 шт):