Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure TPADilation(var TPA: TPointArray; times: Integer);
- var
- w, h, l, i, j, c, s, g, n, t: Integer;
- b: TBox;
- p: TPoint;
- m: T2DIntegerArray;
- o, d: TIntegerArray;
- se: TStructuringElement;
- begin
- if (times > 0) then
- begin
- l := Length(TPA);
- if (l > 0) then
- begin
- b := pp_TPABounds(TPA);
- pp_BoxResize(b, (times + 1));
- pp_BoxDimensions(b, w, h);
- m := pp_Create(0, w, h);
- se := pp_SE_Cross(1, 1, -1, 1, 1);
- g := 3;
- c := 0;
- for i := 0 to (l - 1) do
- if not (m[(TPA[i].X - b.X1)][(TPA[i].Y - b.Y1)] = 1) then
- begin
- m[(TPA[i].X - b.X1)][(TPA[i].Y - b.Y1)] := 1;
- TPA[c] := TPA[i];
- c := (c + 1);
- end;
- l := (l - (c - 1));
- s := (l - 1);
- if (c > 0) then
- SetLength(TPA, l);
- d := pp_TIAByRange(0, (w * h));
- t := 0;
- repeat
- n := 0;
- o := pp_Clone(d);
- for i := 0 to s do
- for j := 0 to g do
- begin
- p.X := (TPA[o[i]].X + se[j].pixel.X);
- p.Y := (TPA[o[i]].Y + se[j].pixel.Y);
- if (m[(p.X - b.X1)][(p.Y - b.Y1)] = 0) then
- begin
- SetLength(TPA, (l + 1));
- TPA[l] := p;
- m[(p.X - b.X1)][(p.Y - b.Y1)] := 1;
- d[n] := (l + i);
- n := (n + 1);
- l := (l + 1);
- end;
- end;
- s := (n - 1);
- t := (t + 1);
- until (t >= times);
- end;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement