ImageEn, unit imageenview

TImageEnView.LayersCreateFromEdge

TImageEnView.LayersCreateFromEdge


Declaration

function LayersCreateFromEdge(x, y: integer; Tolerance: integer; MaxFilter: boolean = False; idx: Integer = -1): Integer;


Description

Creates a new Polyline layer with a closed polyline (polygon) along the edge of the background layer.
The edge is determined by simulating a flood fill starting at the point specified by x,y (which are bitmap or client area points depending on SelectionBase).
Parameter Description
x Starting horizontal coordinate
y Starting vertical coordinate
Tolerance Specifies the color difference between the starting pixel and the pixel being tested (Range: 0 - 255)
MaxFilter Set to True to apply a maximum filter that removes noise
idx Specifies the insertion index for the layer, or -1 to append
CheckAlpha If true, it also considers the AlphaChannel when matching
Result is the index of the created layer, or -1 if the method fails

Note: If SelectionBase = iesbClientArea then x and y are assumed to be visible points on the control. If iesbBitmap, the points specify a position on the bitmap.


Demos

Demo  Demos\LayerEditing\MagicFillToPolygon\Magic2Polygon.dpr
Demo  Demos\ImageEditing\EveryMethod\EveryMethod.dpr


Method Testing

ImageEnView1.IO.LoadFromFile( 'D:\TestImage.jpg' );
  
// Automatically select a color region and convert it to a polygon
ImageEnView1.SelectionBase := iesbBitmap;
if ImageEnView1.LayersCreateFromEdge( ClickPt.X, ClickPt.Y, 54, False ) > 0 then
begin
  ImageEnView1.CurrentLayer.BorderWidth := 2;
  ImageEnView1.CurrentLayer.BorderColor := Color;
  ImageEnView1.CurrentLayer.FillColor   := clWhite;
  ImageEnView1.LayersMergeAll();
end;
  


Examples

// Create a new polygon layer when the user clicks on the image
procedure TForm1.ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ImageEnView1.SelectionBase := iesbClientArea;
  ImageEnView1.LayersCreateFromEdge( X, Y, 25, true );
  TIEPolyLineLayer( ImageEnView1.CurrentLayer ).LineColor := clBlack;
  TIEPolyLineLayer( ImageEnView1.CurrentLayer ).FillColor := clNone;
  ImageEnView1.Update();
end;

// Create a new polygon using a floodfill from the top left of the background image
ImageEnView1.SelectionBase := iesbClientArea;
ImageEnView1.LayersCreateFromEdge( ImageEnView1.XBmp2Scr( 0 ), ImageEnView1.YBmp2Scr( 0 ), 25, true);
TIEPolyLineLayer( ImageEnView1.CurrentLayer ).LineColor := clRed;
TIEPolyLineLayer( ImageEnView1.CurrentLayer ).LineWidth := 2;
TIEPolyLineLayer( ImageEnView1.CurrentLayer ).FillColor := clWhite;
TIEPolyLineLayer( ImageEnView1.CurrentLayer ).Transparency := 128;  // 50% transparent
ImageEnView1.Update();


See Also

SmoothJaggedEdges
SimplifyPolygon
SimplifyPolygon2
LayersCreatePolylineFromSelection