159 lines
4.0 KiB
Plaintext
159 lines
4.0 KiB
Plaintext
unit uMain;
|
||
|
||
interface
|
||
|
||
uses
|
||
Windows, Forms, Graphics, StdCtrls, ComCtrls, Classes, Controls, imageenview, hyiedefs, hyieutils, math, iexBitmaps,
|
||
iesettings, Dialogs, ExtDlgs, Menus, ExtCtrls, ieview, SysUtils, ieopensavedlg, imageenproc, iexLayers,
|
||
iexRulers;
|
||
|
||
type
|
||
TfrmRotate = class(TForm)
|
||
ImageEnView1: TImageEnView;
|
||
trkRotate: TTrackBar;
|
||
Timer1: TTimer;
|
||
plBottom: TPanel;
|
||
btnCrop: TButton;
|
||
btnLoad: TButton;
|
||
OpenImageEnDialog: TOpenImageEnDialog;
|
||
btnSave: TButton;
|
||
lblRotation: TLabel;
|
||
SaveImageEnDialog: TSaveImageEnDialog;
|
||
lblDegrees: TLabel;
|
||
grpOptions: TGroupBox;
|
||
lblSource: TLabel;
|
||
cmbCropAlgorithm: TComboBox;
|
||
chkGuidelines: TCheckBox;
|
||
procedure FormDestroy(Sender: TObject);
|
||
procedure FormCreate(Sender: TObject);
|
||
procedure trkRotateChange(Sender: TObject);
|
||
procedure Timer1Timer(Sender: TObject);
|
||
procedure btnCropClick(Sender: TObject);
|
||
procedure btnLoadClick(Sender: TObject);
|
||
procedure btnSaveClick(Sender: TObject);
|
||
procedure chkGuidelinesClick(Sender: TObject);
|
||
procedure cmbCropAlgorithmChange(Sender: TObject);
|
||
private
|
||
fSourceBitmap: TIEBitmap;
|
||
function GetSelectedCropAlgorithm: TIECropAlgorithm;
|
||
procedure SetSelectedCropAlgorithm(const Value: TIECropAlgorithm);
|
||
procedure UpdateView();
|
||
public
|
||
property SelectedCropAlgorithm: TIECropAlgorithm read GetSelectedCropAlgorithm write SetSelectedCropAlgorithm;
|
||
end;
|
||
|
||
var
|
||
frmRotate: TfrmRotate;
|
||
|
||
implementation
|
||
|
||
uses
|
||
iexHelperFunctions;
|
||
|
||
|
||
{$R *.dfm}
|
||
{$R WindowsTheme.res}
|
||
|
||
procedure TfrmRotate.btnCropClick(Sender: TObject);
|
||
begin
|
||
ShowTempHourglass;
|
||
ImageEnView1.LockPaint;
|
||
try
|
||
ImageEnView1.IEBitmap.Assign(fSourceBitmap);
|
||
ImageEnView1.Proc.RotateAndCrop( trkRotate.Position, ierBicubic, fSourceBitmap.Height / fSourceBitmap.Width, SelectedCropAlgorithm );
|
||
fSourceBitmap.Assign( ImageEnView1.IEBitmap );
|
||
trkRotate.Position := 0;
|
||
finally
|
||
ImageEnView1.UnLockPaint;
|
||
end;
|
||
end;
|
||
|
||
|
||
procedure TfrmRotate.btnLoadClick(Sender: TObject);
|
||
begin
|
||
if OpenImageEnDialog.Execute then
|
||
begin
|
||
ShowTempHourglass;
|
||
fSourceBitmap.Read( OpenImageEnDialog.FileName );
|
||
UpdateView;
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmRotate.FormDestroy(Sender: TObject);
|
||
begin
|
||
FreeAndNil(fSourceBitmap);
|
||
end;
|
||
|
||
procedure TfrmRotate.FormCreate(Sender: TObject);
|
||
begin
|
||
fSourceBitmap := TIEBitmap.Create;
|
||
SelectedCropAlgorithm := iecaAngledPhoto;
|
||
end;
|
||
|
||
procedure TfrmRotate.btnSaveClick(Sender: TObject);
|
||
begin
|
||
if SaveImageEnDialog.Execute then
|
||
begin
|
||
ShowTempHourglass;
|
||
ImageEnView1.IO.SaveToFile( SaveImageEnDialog.FileName );
|
||
end;
|
||
end;
|
||
|
||
procedure TfrmRotate.chkGuidelinesClick(Sender: TObject);
|
||
begin
|
||
IEGlobalSettings().GuidelineCount := 4;
|
||
IEGlobalSettings().GridPen.Color := clSilver;
|
||
IEGlobalSettings().GridPen.Style := psDot;
|
||
IEGlobalSettings().GridPen.Mode := pmCopy;
|
||
|
||
if chkGuidelines.checked then
|
||
ImageEnView1.DisplayGridKind := iedgGuideLines
|
||
else
|
||
ImageEnView1.DisplayGridKind := iedgNone;
|
||
end;
|
||
|
||
procedure TfrmRotate.cmbCropAlgorithmChange(Sender: TObject);
|
||
begin
|
||
UpdateView();
|
||
end;
|
||
|
||
function TfrmRotate.GetSelectedCropAlgorithm: TIECropAlgorithm;
|
||
begin
|
||
Result := TIECropAlgorithm( cmbCropAlgorithm.ItemIndex );
|
||
end;
|
||
|
||
procedure TfrmRotate.SetSelectedCropAlgorithm(const Value: TIECropAlgorithm);
|
||
begin
|
||
cmbCropAlgorithm.ItemIndex := ord( value );
|
||
end;
|
||
|
||
|
||
procedure TfrmRotate.Timer1Timer(Sender: TObject);
|
||
begin
|
||
UpdateView;
|
||
end;
|
||
|
||
procedure TfrmRotate.trkRotateChange(Sender: TObject);
|
||
begin
|
||
Timer1.Enabled := False;
|
||
Timer1.Enabled := True;
|
||
end;
|
||
|
||
procedure TfrmRotate.UpdateView();
|
||
begin
|
||
if ImageEnView1.IEBitmap.IsEmpty() then
|
||
exit;
|
||
|
||
Timer1.Enabled := False;
|
||
ImageEnView1.LockUpdate;
|
||
try
|
||
ImageEnView1.IEBitmap.Assign( fSourceBitmap );
|
||
lblDegrees.Caption := IntToStr( trkRotate.Position ) + '<27>';
|
||
ImageEnView1.Proc.RotateAndCrop( trkRotate.Position, ierNone, fSourceBitmap.Height / fSourceBitmap.Width, SelectedCropAlgorithm );
|
||
finally
|
||
ImageEnView1.UnlockUpdate;
|
||
end;
|
||
end;
|
||
|
||
end.
|