Efekty s obrázkami

Hry s farbami
Úlohy na riešenie


Hry s farbami      Nahor


Tento projekt demonštruje niektoré známe efekty grafických editorov.

Na stránke nájdete vždy telá procedúr a ich účinok. Do formulára sme vložili dve grafické plochy, vytvorili skratky na ich Canvas - g1 a g2. Farebné efekty sa vykresľujú na ploche g2. Metóda "Repaint" spomaľuje vykresľovanie.
Farby
for I:=0 to 255 do begin
  g2.Pen.Color:=RGB(255-I,255-I,I);
  g2.MoveTo(0,I);
  g2.LineTo(256,I);
end;
Zameňte poradie zložiek, čím získate iné farebné prechody.

Pero a výplň
g.Pen.Color:=clBlack;
for I:=0 to 50 do begin
  g2.Brush.Color:=RGB(Random(256),Random(256),Random(256));
  X:=Random(Image2.Width);
  Y:=Random(Image2.Height);
  R:=Random(50);
  g2.Ellipse(X-R,Y-R,X+R,Y+R);
end;
Nastavte aj obrysovú farbu útvarov (farbu pera) na vygenerovanú farbu, prípadne kreslite rôzne útvary.

Pixle
for Y:=0 to 255 do begin
  for X:=0 to 255 do
    g2.Pixels[X,Y]:=RGB(X,255-(X+Y) div 2,Y);
  Image2.Repaint;
end;
Zmeňte poradie zložiek farieb RGB pri vykresľovaní pixelov.

Kópia

Na grafickej ploche g1 načítame bitmapový obrázok. Na grafickej ploche g2 sa kopírujú pixle obrázka z g1, pričom sa prepočtom vytvorí istý grafický efekt. Kópiu obrázka na g2 urobíme nasledujúcim kódom.
if not Image1.Visible then begin
  Button4.Caption:='kopia';
  Image1.Show;
  Exit;
end;
for Y:=0 to 255 do begin
  for X:=0 to 255 do
    g2.Pixels[X,Y]:=g1.Pixels[X,Y];
  Image2.Repaint;
end;

Zrkadlenie - symetria podľa osi x
for Y:=0 to 255 do begin
  for X:=0 to 255 do
    g2.Pixels[X,Y]:=Image1.Canvas.Pixels[X,255-Y];
    Image2.Repaint;
end;
Ako by ste urobili zrkadlenie podľa osi y, resp. otočenie o 90o?

Dvojnásobné zväčšenie
for Y:=0 to 255 do begin
  for X:=0 to 255 do
    g2.Pixels[X,Y]:=Image1.Canvas.Pixels[X div 2,Y div 2];
  Image2.Repaint;
end;
Vedeli by ste analogicky vytvoriť viacnásobné zväčšenie, či zmenšenie?

Náhodné farby
for Y:=0 to 255 do begin
  for X:=0 to 255 do
    g2.Pixels[X,Y]:=Image1.Canvas.
	  Pixels[X+random(11)-5,Y+random(11)-5];
  Image2.Repaint;
end;
Pokúste sa zmeniť rozsah náhodných čísel. Ako to ovplyvní výsledný obrázok?

Efekty s vlnením
for Y:=0 to 255 do begin
  for X:=0 to 255 do
     g2.Pixels[X,Y]:=Image1.Canvas.Pixels[X+Round(16*
		Sin(Y/16)),Y+Round(16*Cos(X/16))];
  Image2.Repaint;
end;
Porozmýšľajte, ako by ste urobili známy efekt "Pixelize" ("utajení svedkovia").

Inverzné farby
for Y:=0 to 255 do begin
  for X:=0 to 255 do begin
    F:=Image1.Canvas.Pixels[X,Y];
    r:=F mod 256;
    g:=F div 256 mod 256;
    b:=F div (256*256) mod 256;
    g2.Pixels[X,Y]:=RGB(255-r,255-g,255-b);
  end;
  Image2.Repaint;
end;
Čo sa zmení, ak vymeníme farby r, g, b? Nájdite analogický efekt v nejakom grafickom editore.

Odtiene šedej
for Y:=0 to 255 do begin
  for X:=0 to 255 do begin
    F:=Image1.Canvas.Pixels[X,Y];
    r:=F mod 256;
    g:=F div 256 mod 256;
    b:=F div (256*256) mod 256;
    i:=(r+g+b) div 3;
    g2.Pixels[X,Y]:=RGB(i,i,i);
  end;
  Image2.Repaint;
end;
Uvedomte si, kde sa nachádzajú odtiene šedej farby v modeli RGB.



Úlohy na riešenie      Nahor

1. Vytvorte vlastný bitmapový obrázok o veľkosti 255x255 pixelov. Načítajte ho do grafickej plochy g1. Do projektu doplňte tlačidlá (pozri 4. obrázok), ktoré budú realizovať ďalšie spomínané efekty (zrkadlenie podľa osi y, zmenšenie, "utajení svedkovia", zosvetlenie, stmavenie obrázka a pod.).

2. Vytvorte projekt FOTOALBUM, ktorý umožní "listovať" tam a späť albumom fotografií. Doplňte aj tlačidlo skokov na prvú a poslednú fotografiu.


Práca s myšou Obsah Textové súbory