unit Main; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus, StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, ToolWin, ImageEnProc, ImageEnView, ImageEnIO, hyiedefs, IEOpenSaveDlg, hyieutils, iexBitmaps, iesettings, iexLayers, iexRulers; procedure FillComboWithFilters(aCombo: TCombobox); type TMainForm = class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; FileNewItem: TMenuItem; FileOpenItem: TMenuItem; FileCloseItem: TMenuItem; Window1: TMenuItem; Help1: TMenuItem; N1: TMenuItem; FileExitItem: TMenuItem; WindowCascadeItem: TMenuItem; WindowTileItem: TMenuItem; WindowArrangeItem: TMenuItem; HelpAboutItem: TMenuItem; FileSaveItem: TMenuItem; FileSaveAsItem: TMenuItem; Edit1: TMenuItem; CutItem: TMenuItem; CopyItem: TMenuItem; PasteItem: TMenuItem; WindowMinimizeItem: TMenuItem; SpeedPanel: TPanel; OpenBtn: TSpeedButton; SaveBtn: TSpeedButton; CutBtn: TSpeedButton; CopyBtn: TSpeedButton; PasteBtn: TSpeedButton; StatusBar: TStatusBar; SpeedButton1: TSpeedButton; PastetoRect1: TMenuItem; PopupMenu1: TPopupMenu; Unselect1: TMenuItem; N3: TMenuItem; Cut1: TMenuItem; Copy1: TMenuItem; Paste1: TMenuItem; PasteRect1: TMenuItem; Bevel1: TBevel; trkZoom: TTrackBar; cmbZoom: TComboBox; Label1: TLabel; Tools1: TMenuItem; Effects1: TMenuItem; Background1: TMenuItem; SpeedButton2: TSpeedButton; N2: TMenuItem; Negative1: TMenuItem; Grayscale1: TMenuItem; Rotate1: TMenuItem; N5: TMenuItem; Horizontalflip1: TMenuItem; Verticalflip1: TMenuItem; N6: TMenuItem; miUndo: TMenuItem; Image1: TMenuItem; N4: TMenuItem; N7: TMenuItem; Resize1: TMenuItem; Resample1: TMenuItem; Clear1: TMenuItem; btnUndo: TSpeedButton; Panel1: TPanel; ProgressBar1: TProgressBar; Label2: TLabel; Merge1: TMenuItem; ColorAdjust1: TMenuItem; Histogram1: TMenuItem; SpeedButton4: TSpeedButton; btnRectSelect: TSpeedButton; N8: TMenuItem; Selectscanner1: TMenuItem; Acquire1: TMenuItem; Calccolornumber1: TMenuItem; Reducecolors1: TMenuItem; GetHSVchannels1: TMenuItem; btnHand: TSpeedButton; btnZoom: TSpeedButton; btnPolySelect: TSpeedButton; btnEllipticalSelect: TSpeedButton; ConverttoBW1: TMenuItem; N9: TMenuItem; Zoomproperties1: TMenuItem; ConverttoTruecolor1: TMenuItem; N10: TMenuItem; Crop1: TMenuItem; Hiddentext1: TMenuItem; OpenImageEnDialog1: TOpenImageEnDialog; SaveImageEnDialog1: TSaveImageEnDialog; GetRGBchannels1: TMenuItem; btnMagicSelect: TSpeedButton; N11: TMenuItem; Printersetup1: TMenuItem; PrintDialog1: TPrintDialog; Bevel4: TBevel; Edit2: TEdit; UpDown1: TUpDown; Bevel3: TBevel; PrintPreview1: TMenuItem; Edgedetection1: TMenuItem; btnDeselect: TSpeedButton; btnLassoSelect: TSpeedButton; RemoveRedEyes1: TMenuItem; Bevel2: TBevel; chkAlphaC: TCheckBox; trkAlphaC: TTrackBar; EditImage1: TMenuItem; btnRedo: TSpeedButton; miRedo: TMenuItem; btnCropTool: TSpeedButton; Bevel5: TBevel; procedure FormCreate(Sender: TObject); procedure FileNewItemClick(Sender: TObject); procedure WindowCascadeItemClick(Sender: TObject); procedure UpdateMenuItems(Sender: TObject); procedure WindowTileItemClick(Sender: TObject); procedure WindowArrangeItemClick(Sender: TObject); procedure FileCloseItemClick(Sender: TObject); procedure FileOpenItemClick(Sender: TObject); procedure FileExitItemClick(Sender: TObject); procedure FileSaveItemClick(Sender: TObject); procedure FileSaveAsItemClick(Sender: TObject); procedure CutItemClick(Sender: TObject); procedure CopyItemClick(Sender: TObject); procedure PasteItemClick(Sender: TObject); procedure WindowMinimizeItemClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure HelpAboutItemClick(Sender: TObject); procedure PastetoRect1Click(Sender: TObject); procedure Unselect1Click(Sender: TObject); procedure trkZoomChange(Sender: TObject); procedure cmbZoomChange(Sender: TObject); procedure Effects1Click(Sender: TObject); procedure Background1Click(Sender: TObject); procedure Negative1Click(Sender: TObject); procedure Grayscale1Click(Sender: TObject); procedure Rotate1Click(Sender: TObject); procedure Verticalflip1Click(Sender: TObject); procedure Horizontalflip1Click(Sender: TObject); procedure miUndoClick(Sender: TObject); procedure Resize1Click(Sender: TObject); procedure Resample1Click(Sender: TObject); procedure Clear1Click(Sender: TObject); procedure Merge1Click(Sender: TObject); procedure ColorAdjust1Click(Sender: TObject); procedure Histogram1Click(Sender: TObject); procedure Selectscanner1Click(Sender: TObject); procedure Acquire1Click(Sender: TObject); procedure Calccolornumber1Click(Sender: TObject); procedure Reducecolors1Click(Sender: TObject); procedure GetHSVchannels1Click(Sender: TObject); procedure btnRectSelectClick(Sender: TObject); procedure ConverttoBW1Click(Sender: TObject); procedure Zoomproperties1Click(Sender: TObject); procedure ConverttoTruecolor1Click(Sender: TObject); procedure Crop1Click(Sender: TObject); procedure Hiddentext1Click(Sender: TObject); procedure GetRGBchannels1Click(Sender: TObject); procedure Printersetup1Click(Sender: TObject); procedure trkAlphaCChange(Sender: TObject); procedure chkAlphaCClick(Sender: TObject); procedure UpDown1Changing(Sender: TObject; var AllowChange: Boolean); procedure PrintPreview1Click(Sender: TObject); procedure Edgedetection1Click(Sender: TObject); procedure EditImage1Click(Sender: TObject); procedure Label2Click(Sender: TObject); procedure miRedoClick(Sender: TObject); procedure btnDeselectClick(Sender: TObject); procedure btnLassoSelectClick(Sender: TObject); procedure RemoveRedEyes1Click(Sender: TObject); private { Private declarations } procedure CreateMDIChild(const Name: string; n: boolean); procedure ShowHint(Sender: TObject); public { Public declarations } procedure UpdateChildStatus(); end; var MainForm: TMainForm; implementation {$R *.DFM} {$R WindowsTheme.res} uses ChildWin, About, ImageEn, ColorSel, Rotate, MergeDialog, Histogram, ConvBW, printers, ShellAPI, ResizeImage, ZoomProp, HiddenText; procedure TMainForm.FormCreate(Sender: TObject); begin Application.OnHint := ShowHint; Screen.OnActiveFormChange := UpdateMenuItems; {$IFNDEF VER130} SpeedPanel.ParentBackground := False; Panel1.ParentBackground := False; {$ENDIF VER130} end; procedure TMainForm.ShowHint(Sender: TObject); begin StatusBar.Panels[0].Text := Application.Hint; end; procedure TMainForm.FileNewItemClick(Sender: TObject); begin CreateMDIChild('New' + IntToStr(MDIChildCount + 1) + '.jpg', true); end; // Open procedure TMainForm.FileOpenItemClick(Sender: TObject); begin if OpenImageEnDialog1.Execute then CreateMDIChild(OpenImageEnDialog1.FileName, false); end; procedure TMainForm.FileCloseItemClick(Sender: TObject); begin if ActiveMDIChild <> nil then ActiveMDIChild.Close; end; procedure TMainForm.FileExitItemClick(Sender: TObject); begin Close; end; // cut selection to clipboard procedure TMainForm.CutItemClick(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.CutToClipboard(iecpSelection); end; // copy selection to clipboard procedure TMainForm.CopyItemClick(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.CopyToClipboard(iecpSelection); end; // paste from clipboard procedure TMainForm.PasteItemClick(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.DeSelect; (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.PasteFromClipboard; end; procedure TMainForm.WindowCascadeItemClick(Sender: TObject); begin Cascade; end; procedure TMainForm.WindowTileItemClick(Sender: TObject); begin Tile; end; procedure TMainForm.WindowArrangeItemClick(Sender: TObject); begin ArrangeIcons; end; procedure TMainForm.WindowMinimizeItemClick(Sender: TObject); var I: Integer; begin { Must be done backwards through the MDIChildren array } for I := MDIChildCount - 1 downto 0 do MDIChildren[I].WindowState := wsMinimized; end; procedure TMainForm.UpdateMenuItems(Sender: TObject); var v: boolean; begin v := MDIChildCount > 0; // Disable AlphaChannel tools until image is loaded trkAlphaC.Enabled := v; chkAlphaC.Enabled := v; btnRectSelect.Enabled := v; btnPolySelect.Enabled := v; btnEllipticalSelect.Enabled := v; btnLassoSelect.Enabled := v; btnDeselect.Enabled := v; btnMagicSelect.Enabled := v; btnCropTool.Enabled := v; PrintPreview1.Enabled := v; // disable magicwand selection until image is loaded UpDown1.Enabled := v; Edit2.Enabled := v; FileCloseItem.Enabled := v; FileSaveItem.Enabled := v; FileSaveAsItem.Enabled := v; CutItem.Enabled := v; CopyItem.Enabled := v; PasteItem.Enabled := v; PastetoRect1.Enabled := v; SaveBtn.Enabled := v; CutBtn.Enabled := v; CopyBtn.Enabled := v; PasteBtn.Enabled := v; WindowCascadeItem.Enabled := v; WindowTileItem.Enabled := v; WindowArrangeItem.Enabled := v; WindowMinimizeItem.Enabled := v; cmbZoom.Enabled := v; trkZoom.Enabled := v; Effects1.Enabled := v; Background1.Enabled := v; SpeedButton2.Enabled := v; Negative1.Enabled := v; Grayscale1.Enabled := v; Rotate1.Enabled := v; Verticalflip1.Enabled := v; Horizontalflip1.Enabled := v; miUndo.enabled := v; miRedo.enabled := v; Resize1.enabled := v; Resample1.Enabled := v; Clear1.Enabled := v; btnUndo.Enabled := v; btnRedo.Enabled := v; SpeedButton4.Enabled := v; btnRectSelect.Enabled := v; btnZoom.Enabled := v; btnHand.Enabled := v; Merge1.Enabled := v; Selectscanner1.Enabled := v; Acquire1.Enabled := v; ColorAdjust1.Enabled := v; Histogram1.Enabled := v; Calccolornumber1.Enabled := v; ConverttoBW1.Enabled := v; Reducecolors1.Enabled := v; GetHSVchannels1.Enabled := v; Edgedetection1.enabled := v; ConverttoTruecolor1.enabled := v; GetRGBchannels1.enabled := v; Hiddentext1.enabled := v; RemoveRedEyes1.enabled := v; Zoomproperties1.enabled := v; Crop1.enabled := v; btnRectSelectClick(Self); // UpdateChildStatus(); end; procedure TMainForm.UpdateChildStatus(); var Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; if Child <> nil then begin cmbZoom.Text := FloatToStr(Child.ImageEnView1.Zoom); trkZoom.Position := Trunc(Child.ImageEnView1.Zoom * 10); miUndo.Enabled := Child.ImageEnView1.Proc.CanUndo; miRedo.Enabled := Child.ImageEnView1.Proc.CanRedo; btnUndo.Enabled := Child.ImageEnView1.Proc.CanUndo; btnRedo.Enabled := Child.ImageEnView1.Proc.CanRedo; end; end; procedure TMainForm.FormDestroy(Sender: TObject); begin Screen.OnActiveFormChange := nil; end; procedure TMainForm.HelpAboutItemClick(Sender: TObject); var frmAboutBox: TfrmAboutBox; begin frmAboutBox := TfrmAboutBox.create(nil); try frmAboutBox.ShowModal; finally frmAboutBox.free; end; end; // paste from clipboard to rect procedure TMainForm.PastetoRect1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.PasteFromClipboard(iecpSelection); end; // Cancel selection procedure TMainForm.Unselect1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.DeSelect; end; // Zoom (trackbar) procedure TMainForm.trkZoomChange(Sender: TObject); var Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; Child.ImageEnView1.Zoom := trkZoom.Position / 10; cmbZoom.Text := floattostr(Child.ImageEnView1.Zoom); end; // Zoom (combobox) procedure TMainForm.cmbZoomChange(Sender: TObject); var Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; if cmbZoom.Text = 'Fit' then begin Child.ImageEnView1.Fit; trkZoom.position := trunc(Child.ImageEnView1.zoom * 10); end else begin try trkZoom.Position := trunc(StrToFloat(cmbZoom.Text) * 10); except trkZoom.Position := 100; end; Child.ImageEnView1.Zoom := trkZoom.Position / 10; end; end; // Effects procedure TMainForm.Effects1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.DoPreviews( ppeSpecialEffects ); ProgressBar1.Position := 0; end; // Save as... procedure TMainForm.FileSaveAsItemClick(Sender: TObject); var Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; SaveImageEnDialog1.Filename := Child.Caption; SaveImageEnDialog1.AttachedImageEnIO := Child.ImageEnView1.IO; if SaveImageEnDialog1.Execute then begin Child.Caption := SaveImageEnDialog1.FileName; FileSaveItemClick(Self); end; end; // Save procedure TMainForm.FileSaveItemClick(Sender: TObject); begin with ActiveMDIChild as TMDIChild do begin ImageEnView1.IO.SaveToFile(Caption); ProgressBar1.Position := 0; Changed := false; end; end; // Create/Load image // n=true : new image (not load) procedure TMainForm.CreateMDIChild(const Name: string; n: boolean); var Child: TMDIChild; begin Child := TMDIChild.Create(Application); Child.Caption := Name; if (not n) and FileExists(Name) then begin Child.ImageEnView1.IO.AutoAdjustDPI := true; Child.ImageEnView1.IO.LoadFromFile(Name, True); ProgressBar1.Position := 0; if Child.WindowState = wsNormal then begin Child.ClientWidth := Child.ImageEnView1.IdealComponentWidth; Child.ClientHeight := Child.ImageEnView1.IdealComponentHeight; if Child.width > ClientWidth then Child.Width := ClientWidth; if Child.Height > ClientHeight - SpeedPanel.Height - StatusBar.Height - Panel1.Height - 5 then Child.Height := ClientHeight - SpeedPanel.Height - StatusBar.Height - Panel1.Height - 5; end; end else begin Child.ImageEnView1.Proc.ImageResize(300, 300); Child.ImageEnView1.Proc.ClearUndo; UpdateChildStatus(); end; Child.Changed := false; end; // Select background procedure TMainForm.Background1Click(Sender: TObject); var frmColorSelector: TfrmColorSelector; Child: TMDIChild; begin frmColorSelector := TfrmColorSelector.create( nil ); try Child := ActiveMDIChild as TMDIChild; frmColorSelector.HSVBox1.SetColor(Child.ImageEnView1.background); frmColorSelector.HSVBox1Change(Self); if frmColorSelector.ShowModal = mrOK then Child.ImageEnView1.Background := frmColorSelector.HSVBox1.color; finally frmColorSelector.free; end; end; // Negative procedure TMainForm.Negative1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.Negative; ProgressBar1.Position := 0; end; // Gray scale procedure TMainForm.Grayscale1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.ConvertToGray; ProgressBar1.Position := 0; end; // Rotate procedure TMainForm.Rotate1Click(Sender: TObject); var frmRotate: TfrmRotate; begin frmRotate := TfrmRotate.create( nil ); try with (ActiveMDIChild as TMDIChild) do begin frmRotate.ImageEnView1.Assign(ImageEnView1); frmRotate.ImageEnView1.Proc.Resample(frmRotate.ImageEnView1.Width, -1, rfNone); frmRotate.ImageEnView1.Fit; if frmRotate.ShowModal = mrOK then ImageEnView1.Proc.Rotate(frmRotate.updAngle.position, TIEAntialiasMode(frmRotate.cmbAntiAliasing.ItemIndex)); end; ProgressBar1.Position := 0; finally frmRotate.free; end; end; // vertical flip procedure TMainForm.Verticalflip1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.Flip(fdVertical); end; // horizontal flip procedure TMainForm.Horizontalflip1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.Flip(fdHorizontal); end; // Undo procedure TMainForm.miUndoClick(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.Undo( True ); MainForm.UpdateChildStatus(); end; // Resize procedure TMainForm.Resize1Click(Sender: TObject); var frmResize: TfrmResize; Child: TMDIChild; w, h: integer; begin frmResize := TfrmResize.create( nil ); try Child := ActiveMDIChild as TMDIChild; frmResize.OrgWidth := Child.ImageEnView1.IEBitmap.Width; frmResize.OrgHeight := Child.ImageEnVIew1.IEBitmap.Height; frmResize.Resampling := False; if frmResize.ShowModal = mrOK then begin w := StrToIntDef(frmResize.edtWidth .Text, 0); h := StrToIntDef(frmResize.edtHeight.Text, 0); if (w > 0) and (h > 0) then Child.ImageEnView1.Proc.ImageResize(w, h); end; finally frmResize.Free; end; end; // Resample procedure TMainForm.Resample1Click(Sender: TObject); var frmResize: TfrmResize; Child: TMDIChild; w, h: integer; begin frmResize := TfrmResize.create( nil ); try Child := ActiveMDIChild as TMDIChild; frmResize.OrgWidth := Child.ImageEnView1.IEBitmap.Width; frmResize.OrgHeight := Child.ImageEnView1.IEBitmap.Height; frmResize.Resampling := True; if frmResize.ShowModal = mrOK then begin w := strtointdef(frmResize.edtWidth .text, 0); h := strtointdef(frmResize.edtHeight.text, 0); if (w > 0) and (h > 0) then Child.ImageEnView1.Proc.Resample(w, h, TResampleFilter(frmResize.cmbFilter.Itemindex)); ProgressBar1.Position := 0; end; finally frmResize.Free; end; end; // Clear procedure TMainForm.Clear1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.Clear; end; // Merge procedure TMainForm.Merge1Click(Sender: TObject); var frmMergeDialog: TfrmMergeDialog; begin frmMergeDialog := TfrmMergeDialog.create( nil ); try if frmMergeDialog.ShowModal = mrOK then if frmMergeDialog.ListBox1.ItemIndex >= 0 then begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.Merge( (MDIChildren[frmMergeDialog.ListBox1.ItemIndex] as TMDIChild).ImageEnView1.IEBitmap, 100 - frmMergeDialog.TrackBar1.Position ); end; ProgressBar1.Position := 0; finally frmMergeDialog.free; end; end; // Color adjust... procedure TMainForm.ColorAdjust1Click(Sender: TObject); var Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; Child.ImageEnView1.Proc.DoPreviews( ppeColorAdjustments ); ProgressBar1.Position := 0; end; // Histogram procedure TMainForm.Histogram1Click(Sender: TObject); var frmHistogram: TfrmHistogram; Child: TMDIChild; begin frmHistogram := TfrmHistogram.create( nil ); try Child := ActiveMDIChild as TMDIChild; frmHistogram.ImageEnProc1.AttachedImageEn := Child.ImageEnView1; frmHistogram.HistogramBox1.Update; frmHistogram.ShowModal; finally frmHistogram.free; end; end; // Select scanner procedure TMainForm.Selectscanner1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.IO.SelectAcquireSource; end; // Acquire procedure TMainForm.Acquire1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.IO.Params.SetDefaultParams; (ActiveMDIChild as TMDIChild).ImageEnView1.IO.Acquire; end; // Calc Color count procedure TMainForm.Calccolornumber1Click(Sender: TObject); var nc: integer; begin nc := (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.CalcImageNumColors; ShowMessage('The active images has ' + inttostr(nc) + ' colors.'); end; // Reduce colors procedure TMainForm.Reducecolors1Click(Sender: TObject); var snc: string; nc: integer; begin InputQuery('Reduce Colors', 'Insert colors of image:', snc); nc := StrToIntDef(snc, 0); (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.ConvertTo(nc); ProgressBar1.Position := 0; end; // GetHSVChannels procedure TMainForm.GetHSVchannels1Click(Sender: TObject); var Child: TMDIChild; ChildH: TMDIChild; ChildS: TMDIChild; ChildV: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; ChildH := TMDIChild.Create(Application); ChildH.Caption := Child.Name + ' Hue'; ChildS := TMDIChild.Create(Application); ChildS.Caption := Child.Name + ' Saturation'; ChildV := TMDIChild.Create(Application); ChildV.Caption := Child.Name + ' Value'; Child.imageenView1.proc.GetHSVChannelAll(ChildH.ImageEnView1.IEBitmap, ChildS.ImageEnView1.IEBitmap, ChildV.ImageEnView1.IEBitmap); ChildH.imageenview1.Update; ChildS.imageenview1.Update; ChildV.imageenview1.Update; ProgressBar1.Position := 0; end; // Buttons Select/Hand/Zoom procedure TMainForm.btnRectSelectClick(Sender: TObject); var Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; if not assigned(Child) then exit; if btnRectSelect.down then begin // Select rect Child.ImageEnView1.MouseInteract := [miSelect]; Child.ImageEnView1.Cursor := crIECrossSight; PopupMenu1.AutoPopup := true; end else if btnPolySelect.down then begin // Select polygon Child.ImageEnView1.MouseInteract := [miSelectPolygon]; Child.ImageEnView1.Cursor := crIECrossSight; PopupMenu1.AutoPopup := true; end else if btnEllipticalSelect.down then begin // Select circle Child.ImageEnView1.MouseInteract := [miSelectCircle]; Child.ImageEnView1.Cursor := crIECrossSight; PopupMenu1.AutoPopup := true; end else if btnHand.down then begin // Hand Child.ImageEnView1.MouseInteract := [miScroll]; Child.ImageEnView1.Cursor := crIEHandDrag; PopupMenu1.AutoPopup := true; end else if btnZoom.down then begin // Zoom Child.ImageEnView1.MouseInteract := [miZoom, miScroll]; Child.ImageEnView1.Cursor := crIEZoomIn; PopupMenu1.AutoPopup := false; end else if btnMagicSelect.down then begin // Magic wand Child.ImageEnView1.MouseInteract := [miSelectMagicWand]; Child.ImageEnView1.Cursor := crIECrossSight; PopupMenu1.AutoPopup := true; end else if btnCropTool.down then begin // Magic wand Child.ImageEnView1.MouseInteract := [ miCropTool ]; Child.ImageEnView1.Cursor := crIECrossSight; PopupMenu1.AutoPopup := true; end else Child.ImageEnView1.Deselect; end; // Convert To BW procedure TMainForm.ConverttoBW1Click(Sender: TObject); begin with TfrmConvertBW.Create( nil ) do try if ShowModal = mrOK then case RadioGroup1.ItemIndex of 0: // Threshold if SpeedButton1.Down then (Self.ActiveMDIChild as TMDIChild).ImageEnView1.Proc.ConvertToBWThreshold(-1) else (Self.ActiveMDIChild as TMDIChild).ImageEnView1.Proc.ConvertToBWThreshold(StrToIntDef(Edit1.Text, 0)); 1: // Ordered (self.ActiveMDIChild as TMDIChild).ImageEnView1.Proc.ConvertToBWOrdered; end; ProgressBar1.Position := 0; finally Free; end; end; // Zoom properties procedure TMainForm.Zoomproperties1Click(Sender: TObject); var frmZoomProperties: TfrmZoomProperties; begin frmZoomProperties := TfrmZoomProperties.create( nil ); try with (self.ActiveMDIChild as TMDIChild) do begin frmZoomProperties.cmbFilter.ItemIndex := ord(ImageEnView1.ZoomFilter); frmZoomProperties.chkDelayed.Checked := ImageEnView1.DelayZoomFilter; if frmZoomProperties.ShowModal = mrOK then begin ImageEnView1.ZoomFilter := TResampleFilter(frmZoomProperties.cmbFilter.ItemIndex); ImageEnView1.DelayZoomFilter := frmZoomProperties.chkDelayed.Checked; end; end; finally frmZoomProperties.free; end; end; // Convert to true color procedure TMainForm.ConverttoTruecolor1Click(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.ConvertTo24Bit; ProgressBar1.Position := 0; end; // Crop procedure TMainForm.Crop1Click(Sender: TObject); var ChildC: TMDIChild; Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; ChildC := TMDIChild.Create(Application); ChildC.Caption := IntToStr(MDIChildCount) + '.jpg'; Child.ImageEnView1.AssignSelTo(ChildC.ImageEnView1); end; // Hidden text... procedure TMainForm.Hiddentext1Click(Sender: TObject); begin With TfrmHiddenText.create( nil ) do try ShowModal; finally Free; end; end; // Get RGB Channels procedure TMainForm.GetRGBchannels1Click(Sender: TObject); var Child: TMDIChild; ChildR: TMDIChild; ChildG: TMDIChild; ChildB: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; ChildR := TMDIChild.Create(Application); ChildR.Caption := Child.Name + ' Red'; ChildG := TMDIChild.Create(Application); ChildG.Caption := Child.Name + ' Green'; ChildB := TMDIChild.Create(Application); ChildB.Caption := Child.Name + ' Blue'; Child.imageenView1.proc.GetRGBChannelAll(ChildR.ImageEnView1.IEBitmap, ChildG.ImageEnView1.IEBitmap, ChildB.ImageEnView1.IEBitmap); ChildR.imageenview1.Update; ChildG.imageenview1.Update; ChildB.imageenview1.Update; ChildR.ImageEnView1.Zoom := 100; ProgressBar1.Position := 0; end; // printer setup procedure TMainForm.Printersetup1Click(Sender: TObject); begin PrintDialog1.Execute; end; // automatically apply the alphachannel to the selection or entire image procedure TMainForm.trkAlphaCChange(Sender: TObject); var Child: TMDIChild; PercentAlpha: Extended; begin Child := ActiveMDIChild as TMDIChild; // if alphachannel enabled if chkAlphaC.Checked then begin // if area selected then fill area then else fill entire image if Child.ImageEnView1.Selected then begin Child.ImageEnView1.SetSelectedAreaAlpha(trkAlphaC.Position); Child.ImageEnView1.Update; end else begin Child.ImageEnView1.AlphaChannel.Fill(trkAlphaC.Position); Child.ImageEnView1.Update; end; PercentAlpha := (trkAlphaC.Position / 255) * 100; StatusBar.Panels[1].Text := IntToStr(trkAlphaC.Position); StatusBar.Panels[2].Text := FloatToStrF(PercentAlpha, ffFixed, 7, 0) + '%'; end; end; // Enable Alpha Channel procedure TMainForm.chkAlphaCClick(Sender: TObject); var Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; Child.ImageEnView1.EnableAlphaChannel := chkAlphaC.Checked; trkAlphaC.Enabled := chkAlphaC.Checked; end; // adjust MagicWand Tolerance procedure TMainForm.UpDown1Changing(Sender: TObject; var AllowChange: Boolean); var Child: TMDIChild; begin Child := ActiveMDIChild as TMDIChild; Child.ImageEnView1.MagicWandTolerance := UpDown1.Position; end; // Print Preview procedure TMainForm.PrintPreview1Click(Sender: TObject); begin Screen.Cursor := crHourglass; try (Self.ActiveMDIChild as TMDIChild).ImageEnView1.IO.DoPrintPreviewDialog(iedtDialog); finally Screen.Cursor := crDefault; end; end; // edge detection procedure TMainForm.Edgedetection1Click(Sender: TObject); begin (Self.ActiveMDIChild as TMDIChild).ImageEnView1.Proc.EdgeDetect_ShenCastan(0.99, 0.9, 7, 0, True); end; procedure TMainForm.EditImage1Click(Sender: TObject); var Child: TMDIChild; begin // Best quality output IEGlobalSettings().DefaultRotateAntiAlias := ierBicubic; IEGlobalSettings().DefaultResampleFilter := rfLanczos3; Child := ActiveMDIChild as TMDIChild; Child.ImageEnView1.Proc.DoPreviews( ppeEditingFunctions ); ProgressBar1.Position := 0; end; // Link click procedure TMainForm.Label2Click(Sender: TObject); begin ShellExecute(Handle, 'open', PChar('http://www.imageen.com'), nil, nil, SW_MAXIMIZE); end; // Redo procedure TMainForm.miRedoClick(Sender: TObject); begin (ActiveMDIChild as TMDIChild).ImageEnView1.Proc.Redo( True ); MainForm.UpdateChildStatus(); end; // select none procedure TMainForm.btnDeselectClick(Sender: TObject); begin (Self.ActiveMDIChild as TMDIChild).ImageEnView1.MouseInteract := [miScroll]; (Self.ActiveMDIChild as TMDIChild).ImageEnView1.Cursor := crIEHandDrag; (Self.ActiveMDIChild as TMDIChild).ImageEnView1.DeSelect; end; // Lasso select procedure TMainForm.btnLassoSelectClick(Sender: TObject); begin (Self.ActiveMDIChild as TMDIChild).ImageEnView1.DeSelect; (Self.ActiveMDIChild as TMDIChild).ImageEnView1.MouseInteract := [miSelectLasso]; (Self.ActiveMDIChild as TMDIChild).ImageEnView1.Cursor := crIECrossSight; end; // remove red eyes procedure TMainForm.RemoveRedEyes1Click(Sender: TObject); begin (Self.ActiveMDIChild as TMDIChild).ImageEnView1.Proc.RemoveRedEyes; end; procedure FillComboWithFilters(aCombo: TCombobox); const IEFilter_Names : array[0..17] of string = ('None', 'Triangle', 'Hermite', 'Bell', 'BSpline', 'Lanczos 3', 'Mitchell', 'Nearest', 'Linear', 'Fast Linear', 'Bilinear', 'Bicubic', 'Project BW (B&W only)', 'Project WB (B&W only)', 'WIC Nearest Neighbor', 'WIC Linear', 'WIC Cubic', 'WIC Fant'); var I: Integer; begin aCombo.Clear; for I := Low( IEFilter_Names ) to High( IEFilter_Names ) do aCombo.Items.Add( IEFilter_Names[ I ] ); end; end.