ImageEn, unit imageenview



TIEMouseInteractItems = (miZoom, miSmoothZoom, miScroll, miMovingScroll, miSelect, miSelectPolygon, miSelectCircle, miSelectZoom, miSelectMagicWand, miSelectLasso, miSelectChromaKey, miCropTool, miBrushTool, miCloneTool, miRotateTool, miColorFill, miAlphaFill, miMeasureLength, miMeasureRect, miMeasureEllipse, miMeasurePath, miMeasureAngle, miColorPicker, miRetouchTool, miAdjustBlackWhite, miPdfSelectText, miPdfSelectRgn, miDblClickZoom);
TIEMouseInteract = set of TIEMouseInteractItems;


Actions that occur when the user moves or clicks the mouse.

Also see TIEMouseInteractLayers, which are layer editing interactions.

Value Description
miMovingScroll Moving the mouse over the image (without requiring any clicking) will cause the image to automatically scroll (pan) (see SmoothScrollValue)
miScroll The image can be navigated by clicking with the left mouse button and dragging (Also see: MouseScrollRate)
miSelectZoom If the user selects an area, it will be automatically zoomed into (and become the new display view). Click and move the mouse to select the zoom rectangle (Notes 1 and 2)
miZoom A left mouse click zooms into the image. A right click zooms out (Note 1)
miSmoothZoom Same as miZoom except it smootly zooms to the new level (see SmoothZoomValue and Note 1)
miDblClickZoom Double-click the image to zoom in. Shift Key + double-click to zooms out (Note 1)

Value Description
miSelect A rectangular area can be selected. Click and move the mouse to select the rectangle. miSelect excludes miScroll and miSelectXXX. The Alt Key forces the selection to maintain its aspect ratio (Note 3)
miSelectPolygon A polygonal area can be selected. Click (and release) the left mouse button at each point of the polygon, or click and hold the left button and move to specify continuous irregular lines. Methods to terminate selection can be specified in SelectionOptions (Note 3)
miSelectCircle A circular/elliptical area can be selected. Click the left button and move the mouse. The Alt key will force a circular selection (Note 3)
miSelectMagicWand Selects an irregular region of similar colors. Click the left mouse button upon a pixel and similar colors surrounding it are selected (see MagicWandTolerance). Also affected by the options: MagicWandMode, MagicWandMaxFilter and MagicWandSize (Note 3)
miSelectLasso A polygonal area can be selected with the mouse. Click the left button and move the mouse to select a continuous irregular region (Note 3)
miSelectChromaKey Selects the subject or background in an image with a solid background color (e.g. a green screen). This is controlled by the options in ChromaKeyOptions (Note 3)

Value Description
miCropTool Enables the CropTool allowing the user to select a particular area of an image and discards the portions outside the chosen section. The Shift key snaps crop rotation to a 45 deg. angle (also see ShiftKeyLock)
miCloneTool Enables the CloneTool allowing the user to click a point on the image and then click elsewhere to clone the content from the original offset
miBrushTool Enables the BrushTool allowing the user to click or drag the image to paint
miRetouchTool Enables the RetouchTool allowing the user to perform fixes on the image with a brush, such as smudging, blurring and inpainting
miRotateTool Enables the RotateTool allowing the user to drag the image to rotate it. The Shift key (or ShiftKeyLock) snaps rotation to a 45 deg. angle (Note 4)
miColorFill Enables the FillTool allowing the user to click the image to flood fill with the color ColorFillValue (Tolerance is specified by Tolerance). Hold ALT key sto switch to miAlphaFill
miAlphaFill Enables the FillTool allowing the user to click the image to flood fill with the transparency of AlphaFillValue (Tolerance is specified by Tolerance). Hold ALT key sto switch to miColorFill

Value Description
miMeasureLength Click and drag the cursor to measure distances in the image (use SetScale to set the scale). See demo: Demos\ImageAnalysis\MeasureIt\MeasureIt.dpr (Note 5)
miMeasureRect Click and drag the cursor to measure rectangular areas in the image (use SetScale to set the scale). See demo: Demos\ImageAnalysis\MeasureIt\MeasureIt.dpr (Note 5)
miMeasureEllipse Click and drag the cursor to measure circular areas in the image (use SetScale to set the scale). See demo: Demos\ImageAnalysis\MeasureIt\MeasureIt.dpr (Note 5)
miMeasurePath Use multiple clicks to measure an area or length in the image (use SetScale to set the scale). See demo: Demos\ImageAnalysis\MeasureIt\MeasureIt.dpr (Note 5)
miMeasureAngle Click three points to measure an angle in the image. See demo: Demos\ImageAnalysis\MeasureIt\MeasureIt.dpr

Value Description
miColorPicker Changes the cursor to a color picker allowing the user to select a color from the image. Use ColorSelectActions to determine what occurs when the user selects a color. Also see: ResetAfterColorSelect
miAdjustBlackWhite Adjusts the BlackValue and WhiteValue of the image. Drag up/down to adjust window center (brightness). Drag left/right to adjust window width (contrast)
miPdfSelectText Use with the PdfViewer to allow the user to select text
miPdfSelectRgn Use with the PdfViewer to allow the user to select a rectangular region (e.g. to copy to the clipboard as an image)

1. Zooming will have only a temporary effect if AutoShrink or AutoStretch is enabled unless you add iedoDisableAutoFitWhenZoom to DisplayOptions. Right-click will have no zoom effect popup menus are specified
2. By default, Zoom selections will be match the aspect ratio (so the image does not stretch inconsistenly). You can disable this by removing iedoMaintainAROnZoomSelect from DisplayOptions
3. Holding down the Shift key while selecting will add a new selection region. Holding down the Ctrl key will subtract from the selection. You can force behavior using ShiftKeyLock
4. Use mlRotateLayers in layer applications, and miRotateTool in other (single layer) applications
5. The units use for measurement are specified by DefaultMeasureUnit (or the OnMeasure event) and the accuracy by MeasureDecimalPlaces

Usage Notes

You can only select one of the following:
miScroll, miSelectZoom, miMeasureLength, miMeasureRect, miMeasureEllipse, miMeasurePath, miMeasureAngle,
miSelect, miSelectPolygon, miSelectCircle, miSelectMagicWand, miSelectLasso, miSelectChromaKey,
miCropTool, miBrushTool, miCloneTool, miRetouchTool, miRotateTool,
miColorFill, miAlphaFill, miColorPicker, miAdjustBlackWhite

The following are often used in combinations with others:
miZoom, miSmoothZoom, miDblClickZoom, miMovingScroll, mlEditLayerPoints,
mlMoveLayers, mlResizeLayers, mlRotateLayers (can be used with any of the miSelect* methods, except miSelectZoom)
miZoom/miSmoothZoom can be used with miScroll, miSelect, miSelectCircle, miSelectZoom, miMovingScroll, miMeasureLength, miMeasureRect, miMeasureEllipse, miMeasurePath, miMeasureAngle
miMovingScroll and miDblClickZoom can be used with all interactions
miPdfSelectText can only be used alone or with miPdfSelectRgn

Common Usages

Image Display (Drag-scroll and zoom image):
ImageEnView1.MouseInteractGeneral := [ miZoom, miScroll ];

Selection (create, move and resize layers):
ImageEnView1.MouseInteractGeneral := [ miSelect ];

Interactive Editing Tool:
ImageEnView1.MouseInteractGeneral := [ mi*Tool ]; // Always alone

Measure Lengths:
ImageEnView1.MouseInteractGeneral := [ miMeasureLength ]; // Always alone

Measure Rectangular Area:
ImageEnView1.MouseInteractGeneral := [ miMeasureRect ]; // Always alone

Measure Circular Area:
ImageEnView1.MouseInteractGeneral := [ miMeasureEllipse ]; // Always alone

Measure an Angle:
ImageEnView1.MouseInteractGeneral := [ miMeasureAngle ]; // Always alone

Selections in a multi-layer app
ImageEnView1.MouseInteractGeneral := [ miSelect, mlMoveLayers ];

Selecting text and images in PDF documents
ImageEnView1.MouseInteractGeneral := [ miPdfSelectText, miPdfSelectRgn ];


Demo  Demos\Other\MouseInteract\MouseInteract.dpr
Demo  Demos\ImageEditing\CompleteEditor\PhotoEn.dpr
Demo  Demos\Display\SoftPan\SoftPan.dpr (miMovingScroll)
Demo  Demos\ImageEditing\MakeTransparent\MakeTransparent.dpr (miColorPicker)


// Single left click zoom-in image, single right click zoom-out image, click and
// drag scroll the image (if it is bigger than client area).
ImageEnView1.MouseInteractGeneral := [ miZoom, miScroll ];

...Same but with smooth zooming
ImageEnView1.MouseInteractGeneral := [ miSmoothZoom, miScroll ];

...Similar but must double-click to zoom in, or Shift+double-click to zoom out
ImageEnView1.MouseInteractGeneral := [ miDblClickZoom, miScroll ];

// Allow rectangular selections
ImageEnView1.MouseInteractGeneral := [ miSelect ];

// Allow circular selections
ImageEnView1.MouseInteractGeneral := [ miSelectCircle ];

// Allow the user to select the background in an image with a chroma-key background
ImageEnView1.ChromaKeyOptions.Mode := iecSubject;
ImageEnView1.MouseInteractGeneral := [ miSelectChromaKey ];

// Allow user to make selections when there are multiple layers (current layer will be highlighted. Selecting a new layer will highlight and allow selection. Layer movement is not actually possible)
ImageEnView1.MouseInteractGeneral := [ miSelect, mlMoveLayers ];

// Allow user to make selections when there are multiple layers, including resizing and rotating layers
ImageEnView1.MouseInteractGeneral := [ miSelect, mlMoveLayers, mlResizeLayers, mlRotateLayers ];

// Enable measuring of lengths in image (Imperial)
// Set scale of 250 pixels = one inch
ImageEnView1.SetScale( 250, 1, ieuInches );
IEGlobalSettings().DefaultMeasureUnit := ieuInches;
ImageEnView1.MouseInteractGeneral := [ miMeasureLength ];

// Enable measuring of lengths in image (Metric)
// Set 100 pixels = 4cm
ImageEnView1.SetScale( 100, 4, ieuCentimeters );
IEGlobalSettings().DefaultMeasureUnit := ieuCentimeters;
ImageEnView1.MouseInteractGeneral := [ miMeasureLength ];

// Select whole image and allow user to deselect circular regions
With ImageEnView1 do
  SelectionBase := iesbBitmap;
  Select( 0, 0, IEBitmap.Width, IEBitmap.Height );
  ShiftKeyLock  := [ iessCtrl_SubFromSel ];
  MouseInteractGeneral := [ miSelectCircle ];

// Fill clicked areas with red
ImageEnView1.FillTool.ColorFillValue := clRed;
ImageEnView1.MouseInteractGeneral := [miColorFill];

// Fill clicked areas with 50% transparency
ImageEnView1.FillTool.AlphaFillValue := 128;
ImageEnView1.MouseInteractGeneral := [miAlphaFill];

// Selecting a color updates all tools
ImageEnView1.FillTool.ColorSelectActions := [ ieccChromaKeyColor, ieccBrushColor, ieccFillColor, ieccRotateBackground, ieccLayerFill ];
ImageEnView1.MouseInteractGeneral := [ miColorPicker ];

// Use miColorPicker to set transparent parts of image

procedure TMainForm.btnSelColorClick(Sender: TObject);
  ImageEnView1.MouseInteractGeneral := [ miColorPicker ];

procedure TMainForm.ImageEnView1UserInteraction(Sender: TObject; Event: TIEUserInteractionEvent; Info: Integer);
  c: TColor;
  if Event = ieiColorPickerHover then
    // Hovering over image - show color in our panel
    pnlCurrentColor.Color := TColor( Info );
  if Event = ieiColorPickerClick then
    // Clicked image - set this color as transparent in our image
    c := TColor( Info );
    ImageEnView1.Proc.SetTransparentColors( c, c, 0);

// Smudge the image
ImageEnView1.RetouchTool.RetouchMode    := iermSmudge;
ImageEnView1.RetouchTool.SmudgePressure := 15;
ImageEnView1.RetouchTool.Feathering     := 3;
ImageEnView1.MouseInteractGeneral       := [ miRetouchTool ];

// Apply motion blur to image
ImageEnView1.RetouchTool.RetouchMode      := iermMotionBlur ;
ImageEnView1.RetouchTool.MotionBlurSigma  := 8;
ImageEnView1.RetouchTool.MotionBlurAngle  := 180;
ImageEnView1.RetouchTool.MotionBlurRadius := 10;
ImageEnView1.MouseInteractGeneral         := [ miRetouchTool ];

// Use IEVision's Inpainting to remove blemishes in the image
ImageEnView1.RetouchTool.RetouchMode      := iermIEVisionInpaint;
ImageEnView1.RetouchTool.InpaintRangeSize := 6;
ImageEnView1.MouseInteractGeneral         := [ miRetouchTool ];

// Allow user to select images or text and copy to clipboard (automatically detecting selection based on what is under the cursor)
ImageEnView1.MouseInteractGeneral := [ miPdfSelectText, miPdfSelectRgn ];
ImageEnView1.PdfViewer.Enabled := True;

// Allow user to select text and copy to clipboard (image selection disabled)
ImageEnView1.MouseInteractGeneral := [ miPdfSelectText ];
ImageEnView1.PdfViewer.Enabled := True;

// Allow user to select images and copy to clipboard (text selection disabled)
ImageEnView1.MouseInteractGeneral := [ miPdfSelectRgn ];
ImageEnView1.PdfViewer.Enabled := True;

See Also

- MouseInteractGeneral
- MouseInteractLayers
- SelectionOptions
- LayerDefaults
- LayersAutoClosePolylines