BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/ImageAnalysis/SeparateObjects/umain.pas

133 lines
3.0 KiB
Plaintext

unit umain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
imageenview, ieview, iemview, StdCtrls, ExtCtrls, imageenproc, hyiedefs, hyieutils,
iexBitmaps, iesettings, iexLayers, iexRulers;
type
TMainForm = class(TForm)
Panel1: TPanel;
Button1: TButton;
ImageEnMView1: TImageEnMView;
ImageEnView1: TImageEnView;
Button2: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ImageEnMView1ImageSelect(Sender: TObject; idx: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
{$R WindowsTheme.res}
// Open
procedure TMainForm.Button1Click(Sender: TObject);
var
FileName:String;
begin
FileName:=ImageEnView1.IO.ExecuteOpenDialog;
if FileName<>'' then
begin
ImageEnMView1.Clear;
ImageEnView1.Blank;
ImageEnView1.IO.LoadFromFile( FileName );
ImageEnMView1.SetIEBitmap( ImageEnMView1.AppendImage, ImageenView1.IEBitmap );
end;
end;
// Separate
procedure TMainForm.Button2Click(Sender: TObject);
var
rects:TList;
i:integer;
d:double;
quality:integer;
begin
Screen.Cursor := crHourGlass;
try
// leave only the first image
for i:=1 to ImageEnMView1.ImageCount-1 do
ImageEnMView1.DeleteImage(1);
ImageEnView1.DeSelect;
if CheckBox2.Checked then
quality := 1 // quick process
else
quality := 4; // quality process
rects := ImageEnView1.Proc.SeparateObjects(quality,CheckBox3.Checked);
for i:=0 to rects.Count-1 do
begin
with PRect(rects[i])^ do
begin
if (Right-Left>10) and (Bottom-Top>10) then // removes little objects
begin
// draw boxes
if CheckBox1.Checked then
with ImageEnView1.IEBitmap.Canvas do
begin
Pen.Color:=clRed;
Brush.Style:=bsClear;
Rectangle(Left,Top,Right+1,Bottom+1);
end
else
ImageEnMView1.SetImageRect( ImageEnMView1.AppendImage, ImageEnView1.IEBitmap, Left,Top,Right,Bottom );
end;
end;
dispose(PRect(rects[i]));
end;
rects.free;
ImageEnView1.Update;
if CheckBox1.Checked then
exit;
// Deskew
if Checkbox4.Checked then
for i:=1 to ImageEnMView1.ImageCount-1 do
begin
ImageEnMView1.CopyToIEBitmap(i, ImageEnView1.IEBitmap);
ImageEnView1.Update;
application.processmessages;
d:=ImageEnView1.Proc.SkewDetection;
ImageEnView1.Proc.RotateAndCrop(d);
ImageEnMView1.SetIEBitmap(i,ImageEnView1.IEBitmap);
ImageEnView1.Update;
application.processmessages;
end;
finally
Screen.Cursor:=crDefault;
end;
end;
// Selected an image in left multiview
procedure TMainForm.ImageEnMView1ImageSelect(Sender: TObject;
idx: Integer);
begin
ImageEnMView1.CopyToIEBitmap(idx, ImageEnView1.IEBitmap);
ImageEnView1.Update;
end;
end.