Проект Lazarus “Візерунки”
Об’єкти:
Вкладка Additional: ТImage1, TImage2
Властивості: ТImage1, TImage2: Width: 100, Height: 100 (розміри)
TImage2: Visible: false (невидимий)
Вкладка System: TTimer1
Властивостi: TTimer1: Enabled: false, Interval : 1000 (інтервал спрацювання таймера, період оновлення зображення 1с)
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
with Image2.Canvas do for i:=0 to Image1.Width-1 do for j:=0 to Image1.Height-1 do Pixels[i,j]:=clWhite;
with Image2.Canvas do
for i:=0 to 5 do
begin
Pixels[47+i,47]:=clBlack;
Pixels[47,47+i]:=clBlack;
Pixels[47+i,52]:=clBlack;
Pixels[52,47+i]:=clBlack;
end;
Timer1.Enabled:=true;
б) Зміна конфігурації чорних пікселів в TImage2 в залежності від взаємного розташування в TImage1.
procedure TForm1.Timer1Timer(Sender: TObject);
var
i,j,c:integer;
begin
with Image1.Canvas do
begin
for i:=0 to Image1.Width-1 do for j:=0 to Image1.Height-1 do Pixels[i,j]:=Image2.Canvas.Pixels[i,j];
for i:=1 to Image1.Width-2 do for j:=1 to Image1.Height-2 do
begin
c:=0;
if Pixels[i-1,j]=clblack then inc(c);
if Pixels[i-1,j-1]=clblack then inc(c);
if Pixels[i-1,j+1]=clblack then inc(c);
if Pixels[i+1,j]=clblack then inc(c);
if Pixels[i+1,j-1]=clblack then inc(c);
if Pixels[i+1,j+1]=clblack then inc(c);
if Pixels[i,j-1]=clblack then inc(c);
if Pixels[i,j+1]=clblack then inc(c);
if (Pixels[i,j]=clwhite) and (c=2) then Image2.Canvas.Pixels[i,j]:=clblack;
if (Pixels[i,j]=clBlack) and ((c<2) or (c=4)) then Image2.Canvas.Pixels[i,j]:=clwhite;
end;
end;
end;
Правила побудови узорів:
Пікселі-сусіди розташовані в ближніх клітинках по горизонталі, вертикалі і діагоналі ( у кожного внутрішнього пікселя є рівно 8 сусідів).
Зображення створених візерунків.