In
last two articles we have discussed about how to load an
image in our windows form and how to re size that image see this:
Part1: Open an image
Part2: Resizing image
Now
we will discuss that how we can crop an image
Design form like this view:
In
crop tab there are one two button one is 'Make selection' and other for 'Ok'.
For
cropping an image we will need to define region that is need to crop,in this
article we will use rectangle for defining such area or region
When we click on 'MakeSelection' button and after that draw
a rectangle on picturebox with the help of mouse.
Code for draw rectangle:
Declare some private variables for finding cursor location and define drawing
objects
Dim cropX
As Integer
Dim cropY As
Integer
Dim cropWidth
As Integer
Dim cropHeight
As Integer
Dim oCropX
As Integer
Dim oCropY
As Integer
Dim cropBitmap
As Bitmap
Public cropPen
As Pen
Public cropDashStyle
As Drawing2D.DashStyle =
Drawing2D.DashStyle.DashDot
We
will use mousedown
And mouse move
event for doing this. we will need to implement this code on mouse down event:
If
e.Button = Windows.Forms.MouseButtons.Left Then
Cursor = Cursors.Cross
cropX = e.X
cropY = e.Y
cropPen = New
Pen(color.Black, 1)
cropPen.DashStyle = DashStyle.DashDotDot
End
If
PictureBox1.Refresh()
In above code there are two
variables are using one is cropX for x position of the rectangle location and
another is cropY for y position. cropPen is the object of pen class with pensize
and pencolor.
And write this code on mouse
move event
If
PictureBox1.Image Is
Nothing Then
Exit Sub
If e.Button =
Windows.Forms.MouseButtons.Left Then
PictureBox1.Refresh()
cropWidth = e.X - cropX
cropHeight = e.Y - cropY
PictureBox1.CreateGraphics.DrawRectangle(cropPen,
cropX, cropY, cropWidth, cropHeight)
End If
On mouse event
we can find cursor position with the help of event arg e so we can easily
determine rectangle's width and height. and use drawrectangle method. On above
code cropPen determines the color, size and other styles of rectangle,cropx is x
coordinate of upperleft corner of rectangle, y is y coordinate of upperleft
corner of rectangle and cropWidth,cropHeight are width and height of rectangle
respectively.
Code for crop:
Dim rect As
Rectangle = New Rectangle(cropX, cropY,
cropWidth, cropHeight)
'First we define a rectangle
with the help of already calculated points
Dim OriginalImage
As Bitmap = New
Bitmap(PictureBox1.Image, PictureBox1.Width, PictureBox1.Height)
'Original image
Dim _img
As New
Bitmap(cropWidth, cropHeight) ' for cropinf image
Dim g
As Graphics = Graphics.FromImage(_img)
' create graphics
g.InterpolationMode =
Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
g.CompositingQuality =
Drawing2D.CompositingQuality.HighQuality
'set image attributes
g.DrawImage(OriginalImage, 0, 0, rect,
GraphicsUnit.Pixel)
PictureBox1.Image = _img
In above code I have mentioned
commit you can use this for better understanding.
So I think now we can cropping
any image easily with the help of this scenario.
Thanks.