BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/FullApps/PhotoEn3/Main.PAS

1110 lines
29 KiB
Plaintext

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.