Zitat von
blender:
@Uwe Raabe
Dein Code hat leider immer noch einen Stack Overflow ausgelöst.
Klar! Wenn man auch nur die Hälfte überträgt..., sorry!
So muss es heißen:
Delphi-Quellcode:
procedure Check(c: TColor; x, y, i: integer; image: TImage);
var
c1: TColor;
begin
if (x >= 0) and (x < image.Width) and (y >= 0) and (y < image.Height) then begin // Rekursion endet an den Bildgrenzen!
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;
Abde das hier solltest du noch mal überprüfen:
Zitat von
blender:
Delphi-Quellcode:
function TXYValues.NoRegionLeft(i: integer): boolean;
var x,y: Integer;
begin
result := true;
for x := 1 to High(Values) do
begin
if result then
for y := 1 to High(Values[x]) do
begin
if result then
if Values[x][y] < 1 then
begin
result := false;
Leftx := x;
lefty := y;
end;
end;
end;
end;
Solltest du hier nicht bei 0 anstatt 1 anfangen zu iterieren?