Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#8

Re: Region Growing und Rekursive Aufrufe

  Alt 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
  Mit Zitat antworten Zitat