BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/ImageEditing/RotateAndCrop/uMain.pas

159 lines
4.0 KiB
Plaintext
Raw Blame History

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.