Ala, dejo el ejemplo entero :
Código Delphi
[-]
unit erosi;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
procedure Erosionar(bmp : TBitmap);
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
x,y : integer;
w,h : integer;
begin
w := Image1.Width;
h := Image1.Height;
Image1.Canvas.Brush.Color := clBlack;
Image1.Picture.Bitmap.Canvas.FillRect(Rect(0,0,W,H));
for i := 0 to 10 do
begin
x := random(W);
y := random(H);
Image1.Canvas.Brush.Color := random($00FFFFFF);
Image1.Canvas.Ellipse(Rect(x - random(50),y-random(50),x + random(50),y + random(50)));
end;
end;
procedure Erosionar(bmp : TBitmap);
var
i, j : integer;
ori : TBitmap;
begin
ori := TBitmap.Create;
ori.Width := bmp.Width;
ori.Height := bmp.Height;
for i := 0 to bmp.width do
for j := 0 to bmp.Height do
ori.Canvas.Pixels[i,j] := bmp.Canvas.Pixels[i,j];
for i := 0 to bmp.width do
for j := 0 to bmp.Height do
with ori.Canvas do
begin
if (Pixels[i-1,j-1] = clBlack) or
(Pixels[i ,j-1] = clBlack) or
(Pixels[i+1,j-1] = clBlack) or
(Pixels [i-1,j] = clBlack) or
(Pixels [i+1,j] = clBlack) or
(Pixels [i-1,j+1] = clBlack) or
(Pixels [i ,j+1] = clBlack) or
(Pixels[i+1,j+1] = clBlack) then
bmp.canvas.Pixels[i,j] := clblack else
bmp.canvas.Pixels[i,j] := Pixels[i,j];
end;
ori.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Erosionar(Image1.Picture.Bitmap);
end;
end.
saludos de nuevo.