1110 lines
29 KiB
Plaintext
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.
|