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

77 lines
2.1 KiB
Plaintext

unit umain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ieview, ImageEnView, hyiedefs, hyieutils, iexBitmaps, iesettings,
iexLayers, iexRulers;
type
TForm1 = class(TForm)
ImageEnView1: TImageEnView;
Button1: TButton;
ImageEnView2: TImageEnView;
ImageEnView3: TImageEnView;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{$R WindowsTheme.res}
procedure TForm1.Button1Click(Sender: TObject);
var
VertHist, HorizHist: pintegerarray; // from Delphi 4 VertHist and HorizHist can be dynamic arrays
VertHistHeight, HorizHistWidth, VertHistWidth, HorizHistHeight: integer;
i: integer;
begin
ImageEnView1.io.LoadFromFile(ImageEnView1.io.ExecuteOpenDialog('', '', false, 1, ''));
// histograms
VertHistWidth := ImageEnView3.ClientWidth;
VertHistHeight := ImageEnView1.IEBitmap.Height;
HorizHistWidth := ImageEnView1.IEBitmap.Width;
HorizHistHeight := ImageEnView2.ClientHeight;
getmem(VertHist, VertHistHeight * sizeof(integer));
getmem(HorizHist, HorizHistWidth * sizeof(integer));
ImageEnView1.proc.CalcDensityHistogram(VertHist, HorizHist, VertHistWidth, HorizHistHeight);
// horizontal
ImageEnView2.IEBitmap.Height := HorizHistHeight;
ImageEnView2.IEBitmap.Width := HorizHistWidth;
// vertical
ImageEnView3.IEBitmap.Height := VertHistHeight;
ImageEnView3.IEBitmap.Width := VertHistWidth;
// draw histograms
ImageEnView2.IEBitmap.Canvas.Pen.Color := clBlack;
ImageEnView3.IEBitmap.Canvas.Pen.Color := clBlack;
for i := 0 to HorizHistWidth - 1 do
begin
ImageEnView2.IEBitmap.Canvas.MoveTo(i, HorizHistHeight);
ImageEnView2.IEBitmap.Canvas.LineTo(i, HorizHistHeight - HorizHist[i]);
end;
for i := 0 to VertHistHeight - 1 do
begin
ImageEnView3.IEBitmap.Canvas.MoveTo(0, i);
ImageEnView3.IEBitmap.Canvas.LineTo(VertHist[i], i);
end;
ImageEnView2.Update;
ImageEnView3.Update;
//
freemem(VertHist);
freemem(HorizHist);
end;
end.