Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
Delphi 12 Athens
|
Re: Region Growing und Rekursive Aufrufe
19. Okt 2008, 22:19
Du mußt nicht nur die oberen Array-Grenzen überprüfen, sondern auch die unteren (x < 0 bzw. y < 0).
Dieser Code sollte dein Problem lösen:
Delphi-Quellcode:
procedure TXYValues.RegionGrowing(x, y, i: integer; var image: TImage); // übrigens ist das var hier überflüssig!
procedure Check(c: TColor; x, y, i: integer; image: TImage);
var
c1: TColor;
begin
if (x >= 0) and (x < image.Width) then begin
c1 := image.canvas.pixels[x, y];
if (values[x, y] = 0) and IsAenlich(50, c, c1) then begin
values[x, y] := i;
RegionGrowing(x, y, i, image);
end;
end;
end;
var
c: TColor;
begin
if form23.progressbar1.position = form23.progressbar1.max then
form23.progressbar1.position := 0; // sollte besser auf progressbar1.min gesetzt werden
form23.progressbar1.Position := form23.progressbar1.Position+1;
c := image.Canvas.Pixels[x,y];
Check(c, x + 1, y, i, image);
Check(c, x - 1, y, i, image);
Check(c, x, y - 1, i, image);
Check(c, x, y + 1, i, image);
end;
Ich würde es sogar vorziehen, die procedure Check als Methode von TXYValues zu realisieren (deshalb auch die ausführliche Parameterliste).
Uwe Raabe
|
|
Zitat
|