Cropping a Bitmap (Visual Basic Script)

Take the following steps to add code that lets you select an area with a mouse, crop the display to show only that area, and trim the bitmap to match the selected area. (This example uses both cropping and trimming, so that you can see the difference.):

1.

Start with the project that you created in Loading and Displaying an Image.

2.

Add the following code between the <BODY> </BODY> tags to add a LEAD Raster Process object named RasterProc:

<OBJECT ID="RasterProc" NAME="RasterProc" 
   CLASSID="CLSID:00140712-B1BA-11CE-ABC6-F5B2E79D9E3F"
   CODEBASE="path to CAB file/Ltrpr14n.cab">
   <P>This is not supported in the web browser.</P>
</OBJECT><BR>

3.

Add the following code between the <FORM> </FORM> tags to add two buttons: btnCrop and btnTrim:

<INPUT TYPE="button" NAME="btnSelectRect" VALUE="Select Rectangle" LANGUAGE="VBScript"
      OnClick="SelectRect">

<INPUT TYPE="button" NAME="btnTrim" VALUE="Trim Image" LANGUAGE="VBScript"

      OnClick="Trim">

4.

Add the following code between the <SCRIPT> </SCRIPT> tags:

Dim Cropping 'The state when the mouse is used for cropping
Dim StartX 'Starting X position in screen pixels
Dim StartY 'Starting Y position in screen pixels
Dim EndX 'Ending X position in screen pixels
Dim EndY 'Ending Y position in screen pixels

5.

Add the following code between the <SCRIPT> </SCRIPT> tags for btnCrop and btnTrim buttons respectively:

Sub SelectRect()
       'Set the scale mode to twips so that we do not have to
       'translate mouse coordinates
       LEADRasterView1.ScaleMode = 1
       'Initialize cropping so that you can do it more than once
       If Cropping = True Then
           'Set the clipping area to match the image. 
           LEADRasterView1.SetDstClipRect LEADRasterView1.DstLeft, LEADRasterView1.DstTop, LEADRasterView1.DstWidth, LEADRasterView1.DstHeight
           'Display the image
           LEADRasterView1.ForceRepaint
       End If
       'Set a global variable to let other events know that you are cropping
       Cropping = True
       'Set the pointer to a crosshair
       LEADRasterView1.MousePointer = 2
End Sub

Sub Trim()
       'Trim the bitmap. 
       RasterProc.Trim LeadRasterView1.Raster, 0, 0, LEADRasterView1.Raster.BitmapWidth / 2, LEADRasterView1.Raster.BitmapHeight
End Sub

6.

Add the following code between the <HEAD> </HEAD> tags to handle the Main Control’s MouseDown event:

<SCRIPT LANGUAGE="VBScript" FOR="LEADRasterView1" EVENT="MouseDown(Button, Shift , X , Y)"> 
<!--
    'Save the starting position
    StartX = x
    StartY = y
    'Make the rubberband invisible until the mouse moves
    LEADRasterView1.RubberBandVisible = False
//-->
</SCRIPT>

7.

Add the following code between the <HEAD> </HEAD> tags to handle the Main Control’s MouseMove event:

<SCRIPT LANGUAGE="VBScript" FOR="LEADRasterView1" EVENT="MouseMove(Button, Shift, x, y)"> 
<!--
   Dim rbX
   Dim rbY
   Dim rbWidth
   Dim rbHeight
   If Cropping = True And Button = 1 Then
           'Get the current mouse position
           EndX = x
           EndY = y
           'Determine the origin of the rubberband rectangle, regardless of which way the mouse moves.
           If EndX > StartX Then
               rbX = StartX
           Else
               rbX = EndX
           End If
           If EndY > StartY Then
               rbY = StartY
           Else
               rbY = EndY
           End If
           'Determine the height and width of the rubberband rectangle
           rbHeight = Abs(StartY - EndY)
           rbWidth = Abs(StartX - EndX)
           'Set the rubberband rectangle
           LEADRasterView1.SetRubberBandRect rbX, rbY, rbWidth, rbHeight
           'Alternatively, you could use the following properties to set the
           'rubberband rectangle.
            LEADRasterView1.RubberBandHeight = rbHeight
            LEADRasterView1.RubberBandLeft = rbX
            LEADRasterView1.RubberBandTop = rbY
            LEADRasterView1.RubberBandWidth = rbWidth
            'Make the rubberband rectangle visible
           LEADRasterView1.RubberBandVisible = True
       End If
//-->
</SCRIPT>

8.

Add the following code between the <HEAD> </HEAD> tags to handle the Main Control’s MouseUp event:

<SCRIPT LANGUAGE="VBScript" FOR="LEADRasterView1" EVENT="MouseUp(Button, Shift, x, y)"> 
<!--
   Dim CropLeft
   Dim CropTop
   Dim CropWidth
   Dim CropHeight
   If Cropping = True Then
           'Get the current mouse position
           EndX = x
           EndY = y
           'Get the origin of the clipping rectangle.
           'Allow for different mouse drag directions
           If StartX < EndX Then
               CropLeft = StartX
           Else
              CropLeft = EndX
           End If
           If StartY < EndY Then
               CropTop = StartY
           Else
              CropTop = EndY
           End If
           'Get the height and width of the cropped area
           CropWidth = Abs(EndX - StartX)
           CropHeight = Abs(EndY - StartY)
           'Crop and repaint the image
           LEADRasterView1.SetDstClipRect CropLeft, CropTop, CropWidth, CropHeight
           LEADRasterView1.ForceRepaint
           LEADRasterView1.RubberBandVisible = False
           LEADRasterView1.MousePointer = 0 'Default
   End If
//-->
</SCRIPT>

9.

Run your page to test it.