(Gast)
n/a Beiträge
|
Code Optimierung: floodfill innerhalb 1/10 sek
15. Jun 2008, 21:34
Hallo liebe Leute,
Ich bin grad schon länger dabei ein Headtracking Programm nachzuschreiben es funktioniert halt auch alles bis auf die Geschwindigkeit des FIlters( hab ne eigene Methode dafür geschrieben )
Jetzt denk ich mir halt ich machs mit floodfill nur nicht mit der schon definierten sondern mit einer eigenen, weil ich nach jedem Schrit die Koordinaten abspeichern will .. -- temporär - versteht sich
hier der daweilige code:
Code:
procedure TForm1.rFloodFill(bmp: TBitmap; Pos: TPoint; Color: TColor);
var
GColor: TColor; // Get Color
abs: Byte; // Abstände
function CheckKol: Boolean;
begin
Result:= false;
if ( pos.X < 1 ) and ( pos.x > bmp.Width - 1 ) and
( pos.y < 1 ) and ( pos.y > bmp.Height - 1 )
then
Result:= True; // sie ist an der wand !
end;
begin
abs:= 2;
try
if not CheckKol then
with pos do
begin
if ( not Setted[pos.x-abs,pos.Y] ) and
( not ( bmp.Canvas.Pixels[pos.x-abs, pos.y] = Color ) ) and
( bmp.canvas.Pixels[pos.x-abs, pos.y] = ClickedColor ) then
begin
bmp.Canvas.pixels[pos.x-abs,pos.Y]:= Color;
Setted[pos.X-abs,pos.Y]:= true;
rFloodFill( bmp, point( x - abs, y ), Color );
end else
exit;
if ( not Setted[pos.x,pos.Y+abs] ) and
( not ( bmp.Canvas.Pixels[pos.x, pos.y+abs] = Color ) ) and
( bmp.canvas.Pixels[pos.x, pos.y+abs] = ClickedColor ) then // ist in public definiert, zeigt die erste farbe an !
begin
bmp.Canvas.pixels[pos.x,pos.Y+abs]:= Color;
Setted[pos.X,pos.Y+abs]:= true;
rFloodFill( bmp, point( x, y+abs ), Color );
end else
exit;
if ( not Setted[pos.x+abs,pos.Y] ) and
( not ( bmp.Canvas.Pixels[pos.x+abs, pos.y] = Color ) ) and
( bmp.canvas.Pixels[pos.x+abs, pos.y] = ClickedColor ) then
begin
bmp.Canvas.pixels[pos.x+abs,pos.Y]:= Color;
Setted[pos.X+abs,pos.Y]:= true;
rFloodFill( bmp, point( x + abs, y ), Color );
end else
exit;
if ( not Setted[pos.x,pos.Y-abs] ) and
( not ( bmp.Canvas.Pixels[pos.x, pos.y-abs] = Color ) ) and
( bmp.canvas.Pixels[pos.x, pos.y-abs] = ClickedColor ) then
begin
bmp.Canvas.pixels[pos.x,pos.Y-abs]:= Color;
Setted[pos.X,pos.Y-abs]:= true;
rFloodFill( bmp, point( x, y-abs ), Color );
end else
exit;
end;
except
end;
end;
ich habs geschafft, dass ich es von 9 Sekunden auf 3 runterbringe nur reicht das immernoch nicht... uund es sind noch n paar Fehler wahrschinlich drinnen + hab gerade jetzt kommentiert also entschuldige ich mich schon im voraus für die Fehler !
MfG
|
|
Zitat
|