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.