Среда программирования:
Lazarus
Статья по теме:
Залить гранично-определенную область используя 4-связный алгоритм
Fill4(col, newcol : TColor; x, y : Integer) - рекурсивная ф-ция для заливки
col - цвет границы области
newcol - цвет заливки
x,y - координаты точки внутри области(заливочный центр)
Код программы:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, ColorBox; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; ColorBox1: TColorBox; Label1: TLabel; PaintBox1: TPaintBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Fill4(col, newcol : TColor; x, y : Integer); private { private declarations } public { public declarations } end; var Form1: TForm1; i : Integer; Ax,Ay : array[0..100] of Integer; implementation {$R *.lfm} { TForm1 } //Очищаем область и рисуем многоугольник procedure TForm1.Button1Click(Sender: TObject); begin Form1.PaintBox1.Canvas.Brush.Color:=clDefault; Form1.PaintBox1.Canvas.Rectangle(0,0,PaintBox1.Width,PaintBox1.Height); Ax[0]:=100; Ay[0]:=155; Ax[1]:=175; Ay[1]:=30; Ax[2]:=250; Ay[2]:=155; Ax[3]:=200; Ay[3]:=175; Ax[4]:=175; Ay[4]:=105; Ax[5]:=150; Ay[5]:=175; Ax[6]:=100; Ay[6]:=155; with PaintBox1.Canvas do begin MoveTo(Ax[0],Ay[0]); for i:=1 to 6 do begin LineTo(Ax[i],Ay[i]); MoveTo(Ax[i],Ay[i]); end; end; end; //Заливаем многоугольник цветом, выбранным из списка procedure TForm1.Button2Click(Sender: TObject); begin Fill4(clBlack, ColorBox1.Selected, 175, 80); end; //Рекурсивная ф-ция для заливки гранично-определенной области //4-х связным алгоритмом procedure TForm1.Fill4(col, newcol : TColor; x, y : Integer); begin if((PaintBox1.Canvas.Pixels[x,y]<>col)and //проверка цвета текущего пиксела (PaintBox1.Canvas.Pixels[x,y]<>newcol)) then begin PaintBox1.Canvas.Pixels[x,y]:=newcol; Fill4(col, newcol, x+1, y); Fill4(col, newcol, x, y+1); Fill4(col, newcol, x-1, y); Fill4(col, newcol, x, y-1); end; end; end.
Прикрепленный файл | Размер |
---|---|
Zalivka.rar | 306.09 кб |