Показать сообщение отдельно
Старый 15.12.2008, 06:20   #1
bms2008
AnyKey`щик
 
Регистрация: 27.10.2008
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Заливка фигуры цветом ???

Народ, подскажите, кто знает.
Как быстро залить произвольную фигуру, ограниченную линиями цвета с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;

Последний раз редактировалось bms2008, 15.12.2008 в 06:44.
(Offline)
 
Ответить с цитированием