Michał Polkowski Data wykonania ćwiczenia:
gr. I8Y3S1 2.12.2009r.
WOJSKOWA AKADEMIA TECHNICZNA
Laboratorium Grafiki komputerowej
SPRAWOZDANIE
z ćwiczenia laboratoryjnego nr 1.
Prowadzący:
mgr inż. Wojciech Sulej
Do dyspozycji mamy program, który realizuje pewne funkcje związane z
przekształcaniem obrazu wczytanego z pliku. Zadaniem jest przekształcenie poszczególnych
procedur tak, aby realizowały funkcje zadane przez prowadzącego.
Piksele wczytywane są do komórek pamięci obrazu kolejno wierszami począwszy od
lewego górnego rogu. Po tych komórkach przebiega raster wczytujący (wyświetlający) piksel
korzystając z następujących funkcji:
" ReadPixel(i, j) wczytanie do komorki wyświetlanego obrazu piksela obrazu
wczytanego z pliku o współrzędnych (i, j);
" ReadTlo(N) wczytanie do komórki wyświetlanego obrazu piksela o kolorze
określonym przez stałą N (tutaj czerń);
Wykorzystywana jest także zmienna p, oznaczająca aktualną klatkę w animacji efektów.
Zadanie 1.
Napisac algorytm sterujacy generatorem adresu odczytu w celu uzyskania efektu zaslaniania
poziomego obrazu w kierunku lewej strony obrazu.
Przekształcona przeze mnie funkcja wygląda następująco:
public void Efekt1()
{
//efekt: zasłanianie
if (p >= K) p = 0;
for (int j = 1; j <= L; j++)
{
//wczytuje obraz do czarnego paska
for (int i = 1; i <= K - p; i++)
ReadPixel(i, j);
//wczytuje pasek czarnego tla
for (int i = 1; i <= p; i++)
ReadTlo(N);
}
}
Warunek if(p >= K) p = 0; sprawdza czy przekształceniu uległ już cały obraz. Obraz ma
rozmiar 256x256 pikseli, dlatego maksymalna ilosc klatek dla jednego pełnego
przekształcenia wynosi właśnie 256. Gdy wartosc p przekroczy ta granice przypisujemy jej
wartosc 0, czyli proces przekształcania obrazu wykonuje się od początku, zatacza pętlę.
Pierwsza pętla for przechodzi przez kolejne kolumny obrazu, kolejne pętle
zagnieżdzone wczytują odpowiednio piksele obrazu do pewnego momentu, a następnie
piksele tła (czerń). W ten sposób obraz jest zasłaniany w każdej kolejnej klatce od prawej
strony w lewym kierunku.
Efekt działania programu (dwie wybrane klatki):
Zadanie 2.
Napisac algorytm sterujacy generatorem odczytu w celu uzyskania efektu przewijania
pionowego w kierunku gornej krawedzi ekranu.
Przekształcona przeze mnie funkcja wygląda następująco:
public void Efekt2()
{
//efekt: przewijanie się obrazu do gory
if (p >= L) p = 0;
for (int j = 1 + p; j <= L; j++)
{
for (int i = 1; i <= K; i++)
ReadPixel(i, j);
}
for (int j = 1; j <= p; j++)
{
for (int i = 1; i <= K; i++)
ReadPixel(i, j);
}
}
Podobnie jak w poprzednim zadaniu zmienna p, oznaczająca aktualną klatkę, może
przyjmować wartość maksymalną L = 256, po czym zeruje się i tak proces się zapętla.
Najpierw wczytywane są wiersze obrazu od pierwszego+p wiersza (p aktualna
klatka), a następnie wiersze wcześniej pominięte, tzn od pierwszego do ostatniego-p wiersza.
W ten sposób obraz przewija się w pionie w kierunku górnej krawędzi.
Efekt działania programu (dwie wybrane klatki):
Zadanie 3.
Napisac algorytm sterujacy generatorem adresu odczytu w celu uzyskania efektu
przesuwania obrazu wzdluz przekatnej ekranu w kierunku gornego prawego wierzchołka.
Przekształcona przeze mnie funkcja wygląda następująco:
public void Efekt3()
{
//efekt: przewijanie po przekątnej w prawy-gorny rog
if (p >= L) p = 0;
for (int j = 1 + p; j <= L; j++)
{
for (int i = 1; i <= p; i++)
ReadTlo(N);
for (int i = 1; i <= K - p; i++)
ReadPixel(i, j);
}
for (int j = 1; j <= p; j++)
for (int i = 1; i <= K; i++)
ReadTlo(N);
}
Procedura wczytuje kolejne wiersze obrazu od 1+p wiersza tzn. omija wiersze ktore
wyszly poza górną krawędz ekranu. Wczytuje kolumny począwszy od p pikseli tła bo
obrazek przesuwa się z każdą klatką o 1px w prawo a następnie K-p pikseli obrazu p
pikseli wyszło poza krawędz w klatce numer p. Na koniec wczytywany jest prostokąt
czarnego tła wypełniający pozostałą przestrzeń obrazu.
Efekt działania programu (dwie wybrane klatki):
Wnioski:
Wyniki w każdym z zadań są zgodne z oczekiwaniami. Zrealizowanie tych zadań nie
było trudne, obsługa funkcji ReadPixel() i ReadTlo() oraz zrozumienie działania procedury
wyświetlania obrazu było dosyć łatwe. Myślę, że mogłbym stworzyć inne, bardziej
skomplikowane efekty, wykorzystując wiedzę nabytą w ćwiczeniu.
Wyszukiwarka
Podobne podstrony:
Sprawozdanie Lab1 gr7Bsprawozdanie lab1Sprawozdanie Lab1Sprawozdanie Java Lab1 Karol Leszczyński gr 13tou lab1 sprawozdanie (1)Lab1 SprawozdanieSprawozdanie GK ŁukiLab1 sprawozdanieSprawozdanie AIM LAB1 PiotrowskiSprawozdanie Nsst LAB1 KACZMAREK (1)Lab1 Sprawozdanie DWlab1 sprawozdanieLab1 RoboWorkssprawozdanie felixa2więcej podobnych podstron