Witam.
Dziś zrobimy nasz pierwszy efekt graficzny nazywany rozmyciem.
Chodzi w nim o to aby pobrać pixel z ekranu i obliczać jaki ma mieć kolor :). Ponieważ nie jest to trudny efekt przejdźmy od razu do kodu.
UWAGA  Do działania tego programu potrzebny jest moduł do obsługi trybu 13h o nazwie Graph13h. Dałem go kiedyś w downloadzie.


uses crt,graph13h;
var j:byte;

procedure Setcol(n, r, g, b :byte); {procka ustawiająca paletę kolorów}
begin
port[$3c8] := n;
port[$3c9] := r;
port[$3c9] := g;
port[$3c9] := b;
end;

procedure blur;
var x,y:integer;
k1,k2,k3,k4:byte;

begin
{przejdź przez wszystkie punkty ekranu}
for x:=0 to 319 do
for y:=0 to 199 do
begin
{pobierz 4 pixele naokoło tego właściwego}
k1:=getpixel(x-1,y);
k2:=getpixel(x+1,y);
k3:=getpixel(x,y-1);
k4:=getpixel(x,y+1);
{i postaw pixel o nowym kolorze}
putpixel(x,y,(k1+k2+k3+k4) div 4);
end;
end;

begin
init13h; {włącza tryb 13h}

for j:=0 to 255 do {ustawia paletę}
setcol(j,0,j div 4,0);

bar(106,66,212,132,100); {rysuje domek}
rectangle(150,100,170,132,255);
rectangle(116,76,136,96,180);
line(106,66,160,20,200);
line(107,66,160,21,200);
line(108,66,160,22,200);
line(212,66,160,20,200);
line(211,66,160,21,200);
line(210,66,160,22,200);

readln;
for j:=0 to 4 do {4 razy bluruje ekran}
blur;
readln;
end13h; {wyłącza tryb 13h}
end. {asta la wista bejbe ;)))}



Przeanalizujmy najważniejszą część procedury blur.

putpixel(x,y,(k1+k2+k3+k4) div 4);

Sumując kolory na około pixela i później dzieląc przez 4 otrzymujemy nowy kolor. Prawda, że proste :).

Niektórzy zamiast wykonywać powyższe działanie na każdym pixelu, wykonują na co drugim. Inni znowu nie pobierają 4 pixeli tylko 3 (albo 8). Jeszcze inni operują na składowych red, green, blue pixela. Jak ty będziesz to robił, zależy tylko od Ciebie. Poeksperymentuj.
Swoją wiedzę przekazywał dla was:
Heń

Niech moc będzie z wami :).