BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/Multi/MultiBitmap/umain.pas

278 lines
7.2 KiB
Plaintext

unit umain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, FileCtrl, StdCtrls, ExtCtrls,
hyieutils, ieopensavedlg, imageenview, iemio, ieview, iemview, iexBitmaps, hyiedefs, iesettings;
type
TMainForm = class(TForm)
Panel1: TPanel;
DriveComboBox1: TDriveComboBox;
DirectoryListBox1: TDirectoryListBox;
FileListBox1: TFileListBox;
Label1: TLabel;
edtPage: TEdit;
updPage: TUpDown;
lblMax: TLabel;
Button1: TButton;
Button5: TButton;
Button6: TButton;
ProgressBar1: TProgressBar;
OpenImageEnDialog1: TOpenImageEnDialog;
btnAddPage: TButton;
IEMView1: TImageEnMView;
chkShowContent: TCheckBox;
SaveImageEnDialog1: TSaveImageEnDialog;
btnInsertPage: TButton;
btnMovePage: TButton;
edtTIFFImageDescription: TEdit;
edtTIFFPageName: TEdit;
cmbTIFFCompression: TComboBox;
lblCompression: TLabel;
lblPageName: TLabel;
lblDescription: TLabel;
btnUpdate: TButton;
btnAdjustParams: TButton;
btnRotate: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FileListBox1Change(Sender: TObject);
procedure updPageClick(Sender: TObject; Button: TUDBtnType);
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure btnAddPageClick(Sender: TObject);
procedure btnAdjustParamsClick(Sender: TObject);
procedure btnInsertPageClick(Sender: TObject);
procedure btnMovePageClick(Sender: TObject);
procedure btnRotateClick(Sender: TObject);
procedure btnUpdateClick(Sender: TObject);
procedure chkShowContentClick(Sender: TObject);
procedure cmbTIFFCompressionChange(Sender: TObject);
procedure IEMIO1FinishWork(Sender: TObject);
procedure IEMIO1Progress(Sender: TObject; per: Integer);
procedure IEMView1Click(Sender: TObject);
private
{ Private declarations }
fIEMultiBitmap : TIEMultiBitmap;
procedure UpdateDisplay(bUpdateImages : Boolean = False);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses
ushowpage, imageenio;
{$R *.DFM}
{$R WindowsTheme.res}
procedure TMainForm.FormCreate(Sender: TObject);
begin
fIEMultiBitmap := TIEMultiBitmap.Create;
// Make our multi-bitmap store its own IO parameters list
fIEMultiBitmap.ParamsEnabled := True;
// Improve styling of TImageEnMView
IEMView1.SetModernStyling( True, 180, 150 );
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
FreeAndNil( fIEMultiBitmap );
end;
procedure TMainForm.FileListBox1Change(Sender: TObject);
begin
// Load selected image into Multi-Bitmap
fIEMultiBitmap.Clear;
fIEMultiBitmap.Read( FileListBox1.FileName );
UpdateDisplay( True );
end;
procedure TMainForm.updPageClick(Sender: TObject; Button: TUDBtnType);
begin
UpdateDisplay;
end;
// Save
procedure TMainForm.Button1Click(Sender: TObject);
begin
SaveImageEnDialog1.AutoSetFilterFileType := ioTIFF;
if SaveImageEnDialog1.execute then
fIEMultiBitmap.Write( SaveImageEnDialog1.Filename );
end;
// Delete Page
procedure TMainForm.Button5Click(Sender: TObject);
begin
fIEMultiBitmap.DeleteImage( updPage.Position );
UpdateDisplay( True );
end;
// Show Page
procedure TMainForm.Button6Click(Sender: TObject);
var
tmp:TMemoryStream;
begin
tmp := TMemoryStream.Create;
fIEMultiBitmap.Write( tmp, ioTIFF );
tmp.Position := 0;
fshowpage.ImageEnView1.IO.Params.TIFF_ImageIndex := updPage.Position;
fshowpage.ImageEnView1.IO.LoadFromStreamTIFF( tmp );
tmp.free;
fshowpage.ImageEnView1.Fit;
fshowpage.ShowModal;
end;
// Add/Insert page
// This inserts a single page loaded from a supported file
procedure TMainForm.btnAddPageClick(Sender: TObject);
var
IdxStr: string;
begin
// Select file to insert
if OpenImageEnDialog1.Execute then
begin
// Choose the inserting page
IdxStr := IntToStr( fIEMultiBitmap.Count );
if InputQuery('Page Insertion Index','Specify the index of the new image', IdxStr ) = False then
exit;
// Insert the file
fIEMultiBitmap.InsertImage( StrToIntDef( IdxStr, 0 ), OpenImageEnDialog1.FileName );
// Update
UpdateDisplay( True );
end;
end;
procedure TMainForm.btnAdjustParamsClick(Sender: TObject);
var
mio : TImageEnMIO;
begin
// Attach our Multi-Bitmap to access its methods
mio := TImageEnMIO.CreateFromIEMBitmap( fIEMultiBitmap );
if mio.DoPreviews( updPage.Position ) then
UpdateDisplay( True );
mio.Free;
end;
procedure TMainForm.btnInsertPageClick(Sender: TObject);
begin
// Select file to insert
if OpenImageEnDialog1.Execute then
begin
// Append the file
fIEMultiBitmap.AppendImage( OpenImageEnDialog1.FileName );
// update
UpdateDisplay( True );
end;
end;
procedure TMainForm.btnMovePageClick(Sender: TObject);
var
IdxStr: string;
begin
// Choose the inserting page
IdxStr := IntToStr( fIEMultiBitmap.Count );
if InputQuery('Page Destination Index','Specify the new index of this page', IdxStr ) = False then
exit;
// Insert the file
fIEMultiBitmap.MoveImage( updPage.Position, StrToIntDef( IdxStr, 0 ));
// Update
UpdateDisplay( True );
end;
procedure TMainForm.btnRotateClick(Sender: TObject);
begin
// Rotate all frames of the Multi-Bitmap
fIEMultiBitmap.RotateAll( 270 ); // 270 = 90 CW
UpdateDisplay( True );
end;
procedure TMainForm.btnUpdateClick(Sender: TObject);
var
idx: Integer;
begin
// Set I/O params of the specified frame
idx := updPage.Position;
fIEMultiBitmap.Params[ idx ].TIFF_Compression := TIOTIFFCompression( cmbTIFFCompression.ItemIndex );
fIEMultiBitmap.Params[ idx ].TIFF_ImageDescription := edtTIFFImageDescription.Text;
fIEMultiBitmap.Params[ idx ].TIFF_PageName := edtTIFFPageName.Text;
end;
procedure TMainForm.chkShowContentClick(Sender: TObject);
begin
UpdateDisplay( True );
end;
procedure TMainForm.cmbTIFFCompressionChange(Sender: TObject);
begin
btnUpdate.Enabled := True;
end;
procedure TMainForm.IEMIO1FinishWork(Sender: TObject);
begin
ProgressBar1.Visible := False;
end;
procedure TMainForm.IEMIO1Progress(Sender: TObject; per: Integer);
begin
ProgressBar1.Position := per;
ProgressBar1.Visible := True;
end;
procedure TMainForm.IEMView1Click(Sender: TObject);
begin
updPage.Position := IEMView1.SelectedImage;
UpdateDisplay;
end;
procedure TMainForm.UpdateDisplay(bUpdateImages : Boolean = False);
var
idx: Integer;
begin
if bUpdateImages then
begin
lblMax.Caption := Format( 'of %d', [ fIEMultiBitmap.Count ]);
if chkShowContent.Checked then
IEMView1.AssignEx( fIEMultiBitmap )
else
IEMView1.clear;
end;
if updPage.Position >= fIEMultiBitmap.Count then
updPage.Position := fIEMultiBitmap.Count - 1;
if chkShowContent.checked then
IEMView1.SelectedImage := updPage.Position;
if fIEMultiBitmap.Count > 0 then
begin
// Read I/O params of the specified frame
idx := updPage.Position;
cmbTIFFCompression.ItemIndex := ord( fIEMultiBitmap.Params[ idx ].TIFF_Compression );
edtTIFFImageDescription.Text := fIEMultiBitmap.Params[ idx ].TIFF_ImageDescription;
edtTIFFPageName.Text := fIEMultiBitmap.Params[ idx ].TIFF_PageName;
end;
btnUpdate.Enabled := False;
end;
end.