305 lines
9.3 KiB
Plaintext
305 lines
9.3 KiB
Plaintext
//------------------------------------------------------------------------------
|
|
// ImageEN Convert To & Lossless Transform Demo: 1.0
|
|
//------------------------------------------------------------------------------
|
|
|
|
unit frmresres;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
ComCtrls, StdCtrls, ImageEnView, ImageEn, ImageEnIO, ImageEnProc, HYIEDefs, ExtCtrls,
|
|
IEView, Buttons;
|
|
|
|
type
|
|
TfResize = class ( TForm )
|
|
Button1: TButton;
|
|
Button2: TButton;
|
|
GroupBox2: TGroupBox;
|
|
CheckBox1: TCheckBox;
|
|
Label3: TLabel;
|
|
ComboBox1: TComboBox;
|
|
GroupBox3: TGroupBox;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
Edit1: TEdit;
|
|
Edit2: TEdit;
|
|
UpDown1: TUpDown;
|
|
UpDown2: TUpDown;
|
|
ResetBtn: TButton;
|
|
ImageEnView1: TImageEnView;
|
|
PeviewButton: TButton;
|
|
SpeedButtonLockPreview: TSpeedButton;
|
|
ImageEnView2: TImageEnView;
|
|
Label4: TLabel;
|
|
Label5: TLabel;
|
|
ViewRadioGroup: TRadioGroup;
|
|
procedure FormActivate ( Sender: TObject );
|
|
procedure Edit1Change ( Sender: TObject );
|
|
procedure Edit2Change ( Sender: TObject );
|
|
procedure ResetBtnClick ( Sender: TObject );
|
|
procedure FormCreate ( Sender: TObject );
|
|
procedure FormShow ( Sender: TObject );
|
|
procedure ImageEnView1MouseDown ( Sender: TObject;Button: TMouseButton;
|
|
Shift: TShiftState;X, Y: Integer );
|
|
procedure PeviewButtonClick ( Sender: TObject );
|
|
procedure ImageEnView2MouseDown(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
procedure UpDown1MouseUp(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
procedure UpDown2MouseUp(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
procedure ComboBox1Change(Sender: TObject);
|
|
procedure ViewRadioGroupClick(Sender: TObject);
|
|
procedure ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
Y: Integer);
|
|
procedure ImageEnView2MouseMove(Sender: TObject; Shift: TShiftState; X,
|
|
Y: Integer);
|
|
procedure ImageEnView1ZoomIn(Sender: TObject; var NewZoom: Double);
|
|
procedure ImageEnView1ZoomOut(Sender: TObject; var NewZoom: Double);
|
|
procedure ImageEnView2ZoomIn(Sender: TObject; var NewZoom: Double);
|
|
procedure ImageEnView2ZoomOut(Sender: TObject; var NewZoom: Double);
|
|
private
|
|
{ Private declarations }
|
|
DontChange: boolean;
|
|
procedure Preview;
|
|
public
|
|
{ Public declarations }
|
|
OrgWidth, OrgHeight: integer;
|
|
Resize: Boolean;
|
|
Resample: Boolean;
|
|
end;
|
|
|
|
var
|
|
fResize: TfResize;
|
|
|
|
implementation
|
|
|
|
uses frmMain;
|
|
|
|
{$R *.DFM}
|
|
|
|
procedure TfResize.FormCreate ( Sender: TObject );
|
|
begin
|
|
ImageEnView1.MouseInteract := [miZoom, miScroll];
|
|
ImageEnView1.Cursor := crIEZoomIn;
|
|
ImageEnView1.Scrollbars := ssBoth;
|
|
ImageEnView1.ZoomFilter := rfNone;
|
|
ImageEnView1.BackgroundStyle := iebsChessboard;
|
|
ImageEnView1.SetChessboardStyle ( 6, bsSolid );
|
|
ImageEnView1.BackGround := clWhite;
|
|
ImageEnView2.MouseInteract := [miZoom, miScroll];
|
|
ImageEnView2.Cursor := crIEZoomIn;
|
|
ImageEnView2.Scrollbars := ssBoth;
|
|
ImageEnView2.ZoomFilter := rfNone;
|
|
ImageEnView2.BackgroundStyle := iebsChessboard;
|
|
ImageEnView2.SetChessboardStyle ( 6, bsSolid );
|
|
ImageEnView2.BackGround := clWhite;
|
|
end;
|
|
|
|
procedure TfResize.FormActivate ( Sender: TObject );
|
|
begin
|
|
ImageEnView2.Assign(ImageEnView1);
|
|
Edit1.Text := IntToStr ( OrgWidth );
|
|
Edit2.Text := IntToStr ( OrgHeight );
|
|
DontChange := False;
|
|
ComboBox1.ItemIndex := 0;
|
|
Edit1.SetFocus;
|
|
end;
|
|
|
|
procedure TfResize.Edit1Change ( Sender: TObject );
|
|
begin
|
|
if CheckBox1.Checked and not DontChange then
|
|
begin
|
|
DontChange := True;
|
|
Edit2.Text := IntToStr ( Round ( OrgHeight * StrToIntDef ( Edit1.Text, 0 ) / OrgWidth ) );
|
|
DontChange := False;
|
|
end;
|
|
end;
|
|
|
|
procedure TfResize.Edit2Change ( Sender: TObject );
|
|
begin
|
|
if CheckBox1.Checked and not DontChange then
|
|
begin
|
|
DontChange := True;
|
|
Edit1.Text := IntToStr ( Round ( OrgWidth * StrToIntDef ( Edit2.Text, 0 ) / OrgHeight ) );
|
|
DontChange := False;
|
|
end;
|
|
end;
|
|
|
|
procedure TfResize.Preview;
|
|
var
|
|
w, h: integer;
|
|
begin
|
|
if CheckBox1.Checked and not DontChange then
|
|
begin
|
|
DontChange := true;
|
|
w := StrToIntDef ( Edit1.Text, 0 );
|
|
h := StrToIntDef ( Edit2.Text, 0 );
|
|
if ( w > 0 ) and ( h > 0 ) then
|
|
begin
|
|
if Resize then
|
|
ImageEnView2.Proc.ImageResize ( w, h );
|
|
if Resample then
|
|
ImageEnView2.Proc.Resample ( w, h, TResampleFilter ( fResize.ComboBox1.ItemIndex ) );
|
|
ImageEnView2.Update;
|
|
end;
|
|
DontChange := False;
|
|
end
|
|
else
|
|
begin
|
|
DontChange := true;
|
|
w := StrToIntDef ( Edit1.Text, 0 );
|
|
h := StrToIntDef ( Edit2.Text, 0 );
|
|
if ( w > 0 ) and ( h > 0 ) then
|
|
begin
|
|
if Resize then
|
|
ImageEnView2.Proc.ImageResize ( w, h );
|
|
if Resample then
|
|
ImageEnView2.Proc.Resample ( w, h, TResampleFilter ( fResize.ComboBox1.ItemIndex ) );
|
|
ImageEnView2.Update;
|
|
end;
|
|
DontChange := False;
|
|
end;
|
|
// Show image dimensions
|
|
FormMain.StatusBar1.Panels[1].Text := ' Height: ' + IntToStr ( ImageENView2.Bitmap.Height ) +
|
|
' pixels' + ' Width: ' + IntToStr ( ImageENView2.Bitmap.Width ) + ' pixels ';
|
|
end;
|
|
|
|
procedure TfResize.ResetBtnClick ( Sender: TObject );
|
|
begin
|
|
ImageEnView1.Assign ( FormMain.ImageENView1.Bitmap );
|
|
ImageEnView2.Blank;
|
|
ImageEnView2.Assign(ImageEnView1);
|
|
Edit1.Text := IntToStr ( OrgWidth );
|
|
Edit2.Text := IntToStr ( OrgHeight );
|
|
DontChange := False;
|
|
ComboBox1.ItemIndex := 0;
|
|
OrgWidth := ImageENView1.Bitmap.Width;
|
|
OrgHeight := ImageENView1.Bitmap.Height;
|
|
Edit1.Text := IntToStr ( OrgWidth );
|
|
Edit2.Text := IntToStr ( OrgHeight );
|
|
Edit1.SetFocus;
|
|
end;
|
|
|
|
procedure TfResize.FormShow ( Sender: TObject );
|
|
begin
|
|
// save undo file
|
|
ImageEnView2.Proc.SaveUndo;
|
|
end;
|
|
|
|
procedure TfResize.ImageEnView1MouseDown ( Sender: TObject;
|
|
Button: TMouseButton;Shift: TShiftState;X, Y: Integer );
|
|
begin
|
|
if ImageEnView1.MouseInteract = [miZoom, miScroll] then
|
|
ImageEnView1.Cursor := crIEZoomIn
|
|
else
|
|
ImageEnView1.Cursor := crIEHandDrag;
|
|
end;
|
|
|
|
procedure TfResize.PeviewButtonClick ( Sender: TObject );
|
|
begin
|
|
Preview;
|
|
end;
|
|
|
|
procedure TfResize.ImageEnView2MouseDown(Sender: TObject;
|
|
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
if ImageEnView2.MouseInteract = [miZoom, miScroll] then
|
|
ImageEnView2.Cursor := crIEZoomIn
|
|
else
|
|
ImageEnView2.Cursor := crIEHandDrag;
|
|
end;
|
|
|
|
procedure TfResize.UpDown1MouseUp(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
if SpeedButtonLockPreview.Down then
|
|
Preview;
|
|
end;
|
|
|
|
procedure TfResize.UpDown2MouseUp(Sender: TObject; Button: TMouseButton;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
if SpeedButtonLockPreview.Down then
|
|
Preview;
|
|
end;
|
|
|
|
procedure TfResize.ComboBox1Change(Sender: TObject);
|
|
begin
|
|
UpDown1.SetFocus;
|
|
end;
|
|
|
|
procedure TfResize.ViewRadioGroupClick(Sender: TObject);
|
|
begin
|
|
case ViewRadioGroup.Itemindex of
|
|
0: begin // Zoom
|
|
ImageEnView1.AutoFit := False;
|
|
ImageEnView1.MouseInteract := [miZoom, miScroll];
|
|
ImageEnView1.Update;
|
|
ImageEnView1.Cursor := crIEZoomIn;
|
|
ViewRadioGroup.Items[0] := 'Zoom (' + Format ( '%-4.2f', [ImageEnView1.Zoom] ) + '%)';
|
|
ImageEnView2.AutoFit := False;
|
|
ImageEnView2.MouseInteract := [miZoom, miScroll];
|
|
ImageEnView2.Update;
|
|
ImageEnView2.Cursor := crIEZoomIn;
|
|
ViewRadioGroup.Items[0] := 'Zoom (' + Format ( '%-4.2f', [ImageEnView2.Zoom] ) + '%)';
|
|
end;
|
|
1: begin // AutoFit
|
|
ImageEnView1.AutoFit := True;
|
|
ImageEnView1.MouseInteract := [miScroll];
|
|
ImageEnView1.Update;
|
|
ImageEnView1.Cursor := crDefault;
|
|
ViewRadioGroup.Items[0] := 'Zoom (' + Format ( '%-4.2f', [ImageEnView1.Zoom] ) + '%)';
|
|
ImageEnView2.AutoFit := True;
|
|
ImageEnView2.MouseInteract := [miScroll];
|
|
ImageEnView2.Update;
|
|
ImageEnView2.Cursor := crDefault;
|
|
ViewRadioGroup.Items[0] := 'Zoom (' + Format ( '%-4.2f', [ImageEnView2.Zoom] ) + '%)';
|
|
end;
|
|
end; // case
|
|
end;
|
|
|
|
procedure TfResize.ImageEnView1MouseMove(Sender: TObject;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
ImageEnView2.Zoom := ImageEnView1.Zoom;
|
|
ImageEnView1.Hint := 'Zoom (' + Format ( '%-4.2f', [ImageEnView1.Zoom] ) + '%)';
|
|
ImageEnView2.Hint := 'Zoom (' + Format ( '%-4.2f', [ImageEnView2.Zoom] ) + '%)';
|
|
end;
|
|
|
|
procedure TfResize.ImageEnView2MouseMove(Sender: TObject;
|
|
Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
ImageEnView1.Zoom := ImageEnView2.Zoom;
|
|
ImageEnView1.Hint := 'Zoom (' + Format ( '%-4.2f', [ImageEnView1.Zoom] ) + '%)';
|
|
ImageEnView2.Hint := 'Zoom (' + Format ( '%-4.2f', [ImageEnView2.Zoom] ) + '%)';
|
|
end;
|
|
|
|
procedure TfResize.ImageEnView1ZoomIn(Sender: TObject;
|
|
var NewZoom: Double);
|
|
begin
|
|
ViewRadioGroup.Items[0] := 'Zoom (' + Format ( '%-4.2f', [ImageEnView1.Zoom] ) + '%)';
|
|
end;
|
|
|
|
procedure TfResize.ImageEnView1ZoomOut(Sender: TObject;
|
|
var NewZoom: Double);
|
|
begin
|
|
ViewRadioGroup.Items[0] := 'Zoom (' + Format ( '%-4.2f', [ImageEnView1.Zoom] ) + '%)';
|
|
end;
|
|
|
|
procedure TfResize.ImageEnView2ZoomIn(Sender: TObject;
|
|
var NewZoom: Double);
|
|
begin
|
|
ViewRadioGroup.Items[0] := 'Zoom (' + Format ( '%-4.2f', [ImageEnView2.Zoom] ) + '%)';
|
|
end;
|
|
|
|
procedure TfResize.ImageEnView2ZoomOut(Sender: TObject;
|
|
var NewZoom: Double);
|
|
begin
|
|
ViewRadioGroup.Items[0] := 'Zoom (' + Format ( '%-4.2f', [ImageEnView2.Zoom] ) + '%)';
|
|
end;
|
|
|
|
end.
|
|
|