| ImageEn, unit ImageEnProc |
|
TImageEnProc.CalcDensityHistogram
Declaration
procedure CalcDensityHistogram(VertHist, HorzHist: Pointer; VertMax, HorzMax: Integer);
Description
Calculate the vertical and horizontal density histograms. VertHist and HorzHist are an array of Integer that will be filled with density values (between 0 and max values).
Note: If the image
PixelFormat is not ie1g, ie24RGB or ie32RGB, it will be
converted
Demos
| Demos\ImageAnalysis\DensityAnalysis\DensityAnalysis.dpr |
| Demos\ImageEditing\EveryMethod\EveryMethod.dpr |
Examples
var
vertHist, horzHist: PIntegerArray;
vertHistHeight, horzHistWidth, vertHistWidth, horzHistHeight: Integer;
i: Integer;
begin
ImageEnView1.IO.LoadFromFile( ImageEnView1.IO.ExecuteOpenDialog() );
// Histograms
vertHistWidth := ienVertHist.ClientWidth;
vertHistHeight := ImageEnView1.IEBitmap.Height;
horzHistWidth := ImageEnView1.IEBitmap.Width;
horzHistHeight := ienHorzHist.ClientHeight;
GetMem( vertHist, IECheckedBufferSize( vertHistHeight, SizeOf(Integer) )); // v15.2.1
GetMem( horzHist, IECheckedBufferSize( horzHistWidth, SizeOf(Integer) )); // v15.2.1
try
ImageEnView1.Proc.CalcDensityHistogram( vertHist, horzHist, vertHistWidth, horzHistHeight );
// Draw horizontal histogram
ienHorzHist.IEBitmap.Allocate( horzHistWidth, horzHistHeight, ienHorzHist.Background );
ienHorzHist.IEBitmap.Canvas.Pen.Color := clBlack;
for i := 0 to horzHistWidth - 1 do
begin
ienHorzHist.IEBitmap.Canvas.MoveTo( i, horzHistHeight );
ienHorzHist.IEBitmap.Canvas.LineTo( i, horzHistHeight - horzHist[i] );
end;
ienHorzHist.Update();
// Draw vertical histogram
ienVertHist.IEBitmap.Allocate( vertHistWidth, vertHistHeight, ienVertHist.Background );
ienVertHist.IEBitmap.Canvas.Pen.Color := clBlack;
for i := 0 to vertHistHeight - 1 do
begin
ienVertHist.IEBitmap.Canvas.MoveTo( 0, i );
ienVertHist.IEBitmap.Canvas.LineTo( vertHist[i], i );
end;
ienVertHist.Update();
finally
FreeMem( vertHist );
FreeMem( horzHist );
end;
end;
// Load test image
ImageEnView1.IO.LoadFromFile( 'D:\TestImage.jpg' );

// Draw density histograms for the image
GetMem(vertoHist, ImageEnView2.IEBitmap.Height * SizeOf(Integer));
GetMem(horzoHist, ImageEnView2.IEBitmap.Width * SizeOf(Integer));
ImageEnView1.Proc.CalcDensityHistogram( vertHisto, horzHisto, ImageEnView2.IEBitmap.Width, ImageEnView2.IEBitmap.Height );
ImageEnView2.IEBitmap.Canvas.Pen.Color := clNavy;
for i := 0 to ImageEnView2.IEBitmap.Width - 1 do
begin
ImageEnView2.IEBitmap.Canvas.MoveTo( i, ImageEnView2.IEBitmap.Height );
ImageEnView2.IEBitmap.Canvas.LineTo( i, ImageEnView2.IEBitmap.Height - horzHisto[i] );
end;
ImageEnView2.Update();
FreeMem( vertHist );
FreeMem( horzHist );