The following code snippet shows you how to draw a selection rectangle over the top of an image and crop it accordingly.
You’ll need to add a Button and a PictureBox to a Form.
Click and drag over the PictureBox to select an area and when you’re ready, click the button and it will perform the crop and save the cropped selection as a new image. This follows on from my last post, have a play around with these methods and explore further!
using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private Point startPoint = new Point(); //the point(x,y) we start drawing our rectange private Rectangle myRectangle = new Rectangle(); //a rectangle public Form1() { InitializeComponent(); } private void pictureBox1_MouseEnter(object sender, EventArgs e) { this.Cursor = Cursors.Cross; } private void pictureBox1_MouseLeave(object sender, EventArgs e) { this.Cursor = Cursors.Default; } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { startPoint.X = e.X; //start point gets mouse coords startPoint.Y = e.Y; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) //are we holding the left mouse button? { Point endPoint = new Point(); //the end point (x,y) of our rectangle Pen p = new Pen(Brushes.Red); //a red pen Graphics g = pictureBox1.CreateGraphics(); endPoint.X = e.X; //end point gets mouse coords endPoint.Y = e.Y; pictureBox1.Refresh(); //stop flicker and actually display rectangle Size myRectSize = new Size(endPoint.X - startPoint.X, endPoint.Y - startPoint.Y); //calculate the size of our rectangle myRectangle = new Rectangle(startPoint, myRectSize); //assign new rectangle object g.DrawRectangle(p, myRectangle); //and draw it! } } private void button1_Click(object sender, EventArgs e) { Image myImage = CropImage(pictureBox1.Image, myRectangle); //crop the image myImage.Save("C:\\testPic.png", ImageFormat.Png); //save it } private static Image CropImage(Image imageToCrop, Rectangle rect) { Bitmap b = new Bitmap(imageToCrop); //new bmp Image croppedImage = b.Clone(rect, b.PixelFormat); //copy a section of the original return croppedImage; } } }