Obróbka obrazu

0

Witam
Robię program, który ma za zadanie zrobienie screenshota z całego ekranu i załadowaniu go do jakiegoś komponentu. Następnie za pomocą ramki(użyłem Rectangle) zaznacza się w tym komponencie interesujący element z tym ze obraz muszę powiększyć tak żeby jeden piksel był na ekranie widoczny jako 1cm kwadracik bo potrzebuje tą ramką zaznaczyć tylko kilka pikseli.
PictureBox się do tego nie nadaje a Panel jest ok tylko ze Invalidate odświeża całość w moim przypadku cały ekran-panel.
Chcę potem wyciąć te zaznaczony fragment i zapisać do folderu. Proszę o jakąś pomoc do tego co już mam. To zaznaczanie już mam (powiedzmy ze to jeszcze dopracuje póżniej) martwi mnie to ze nie wiem jak powiększyć fragment obrazu do rozmiarów pikselozy.

private void button1_Click(object sender, EventArgs e)
        {
            panel1.BackgroundImage = ScreenShot();
            
            //pictureBox1.Image = ScreenShot();
            //pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            
            //pictureBox1.Image.Save(
              //"ScreenShotShot.jpg", ImageFormat.Jpeg);
        }

        public Bitmap ScreenShot()
        {
          Rectangle totalSize = Rectangle.Empty;
            
          //foreach (Screen s in Screen.AllScreens)Screen.PrimaryScreen
            totalSize = Rectangle.Union(totalSize, Screen.PrimaryScreen.Bounds);

          Bitmap screenShotBMP = new Bitmap(
              totalSize.Width, totalSize.Height,
              PixelFormat.Format32bppArgb);

          Graphics screenShotGraphics = Graphics.FromImage(
              screenShotBMP);

          screenShotGraphics.CopyFromScreen(
              totalSize.Location.X,
              totalSize.Location.Y,
              0, 0, totalSize.Size,
              CopyPixelOperation.SourceCopy);
            
          return screenShotBMP;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form1.ActiveForm.WindowState = FormWindowState.Maximized;
            //pictureBox1.Dock = DockStyle.Fill;
            panel1.Dock = DockStyle.Fill;
            Form1.ActiveForm.WindowState = FormWindowState.Minimized;
            Thread.Sleep(2000);
            button1_Click(null, null); 
            panel2.BackColor = Color.FromArgb(0, 0, 0, 0);
            panel2.Dock = DockStyle.Fill; 
        }
        bool mouseDown = false;
        Point pointPos;
        Rectangle rec;

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            
        }

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            
        }

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
                
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            
        }

        private void panel2_MouseDown(object sender, MouseEventArgs e)
        {
            mouseDown = true;
            pointPos = e.Location;
            panel2.Capture = true;
            rec.X = pointPos.X;
            rec.Y = pointPos.Y;
            rec.Width = 0;
            rec.Height = 0;
            //panel1.Invalidate();
        }

        private void panel2_MouseUp(object sender, MouseEventArgs e)
        {
            mouseDown = false;
            panel2.Capture = false;
            panel2.Invalidate();
        }

        

        private void panel2_Paint(object sender, PaintEventArgs e)
        {
            SolidBrush b = new SolidBrush(Color.FromArgb(0, 255, 0, 0));
            Pen p = new Pen(Color.FromArgb(255, 255, 0, 0));
            e.Graphics.DrawRectangle(p, rec);
        }

        private void panel2_MouseMove(object sender, MouseEventArgs e)
        {
            if (mouseDown)
            {
                if (e.X > pointPos.X + rec.Width)
                    rec.Width += 1;
                if (e.X < pointPos.X + rec.Width)
                    rec.Width -= 1;
                if (e.Y > pointPos.Y + rec.Height)
                    rec.Height += 1;
                if (e.Y < pointPos.Y + rec.Height)
                    rec.Height -= 1;
                //panel2.Invalidate();
                
                //g.FillRectangle(b, 

            }
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1