Народ, подскажите, кто знает.
Как
быстро залить
произвольную фигуру, ограниченную линиями цвета с1, заданным цветом с2, начиная с указанной точки (x,y), находящейся внутри фигуры?
Я делал с помощью библиотеки Lib_alpha, где есть GetColor и рекурсии, но фигуру 120x300 это ТАК долго закрашивает - я пока ждал завершения программы поседел и умер 2 раза
Потоки тоже не на много улучшили дело...
Моя процедура:
.....
w:=getwidth;
h:=getheight;
SetColor(255, 255, 255); //цвет заливки
Fill(xm,ym,c1); //c1 - цвет ARGB ограничивающих линий
.......
Procedure Fill(x,y,col1:integer);
var
cc,cc1,cc2,cc3,cc4:integer;
begin
cc:=GetColor(im1,x,y);
cc1:=GetColor(im1,x-1,y);
cc2:=GetColor(im1,x+1,y);
cc3:=GetColor(im1,x,y-1);
cc4:=GetColor(im1,x,y+1);
if (cc <> col1) then
begin
Plot(x, y);
im1:=ImageFromCanvas(0,0,w,h);
end;
if (cc1 <> col1) then
begin
Plot(x-1, y);
im1:=ImageFromCanvas(0,0,w,h);
Fill(x-1,y, col1);
end;
if (cc2 <> col1) then
begin
Plot(x+1, y);
im1:=ImageFromCanvas(0,0,w,h);
Fill(x+1,y, col1);
end;
if (cc3 <> col1) then
begin
Plot(x, y-1);
im1:=ImageFromCanvas(0,0,w,h);
Fill(x,y-1, col1);
end;
if (cc4 <> col1) then
begin
Plot(x, y+1);
im1:=ImageFromCanvas(0,0,w,h);
Fill(x,y+1, col1);
end;
end;