240 likes | 334 Views
Programtervező informatikus (esti) 2011/2012 őszi félév. Számítógépes Grafika 2. gyakorlat. Utasítások. PImage: .gif, .jpg, .tga és .png képek megjelenítését szolgáló osztály A .width és .height mezők az adott kép szélességét és magasságát tárolják A .pixels tömbje pedig a színeket.
E N D
Programtervező informatikus (esti) 2011/2012 őszi félév Számítógépes Grafika2. gyakorlat
Utasítások • PImage: • .gif, .jpg, .tga és .png képek megjelenítését szolgáló osztály • A .width és .height mezők az adott kép szélességét és magasságát tárolják • A .pixels tömbje pedig a színeket
Utasítások • loadImage(eleres): visszaad egy PImage-t, ami az első paraméterben megadott elérési útvonalon található (lehet URL is!) • image(img, x, y, width, height): kirajzol • Az img nevű PImage típusú képet kifeszíti az (x, y, width, height) által meghatározott téglalapra (ha kell nagyít/kicsinyít)
Utasítások • A pixels[] tömb használata a következő: • Először img.loadPixels() függvényhívás kell, ami feltölti a pixels[] tömböt • Utána használhatjuk a img.pixels[]-t a kép pixeleinek lekérdezésére és módosítására (1D-s a tömb!) • Végül ha módosításokat végeztünk, akkor img.updatePixels()-t kell hívnunk
Példa • PImage i ; • void setup() { • size(600,600) ; • i = loadImage("http://hapakj.web.elte.hu/szgesti/images/elte.png") ; • } • void draw() { • image(i,10,10) ; • }
Feladat 1 • Töltsetek be egy tetszőleges képet a netről • Bal kattintás jelölje ki a kép bal felső pozícióját • Jobb kattintás pedig a jobb alsót
Adatszerkezetek • A Processing támogatja alapból a következő tároló típusokat: • ArrayList • HashMap • Array • stb… • Használatuk a Java referencia szerint
Adatszerkezetek • PVector: • 2 vagy 3 dimenziós vektor • Adatmezők: x, y, z • Eljárások: set(), get(), mag(), add(), sub(), normalize(), …
ArrayList példa ArrayList al = newArrayList(); al.add(newPVector(3, 2)); al.add(newPVector(35, 22)); for (int i=0; i<al.size(); ++i) { PVector p = (PVector)al.get(i); print(p); }
Feladat 2 • Írjuk programot, ami minden bal egérgombbal történő kattintást rögzít és hozzáadja egy listához. • Minden ponthármasra rajzoljunk ki egy háromszöget.
Fájl output • PrintWriter: • Fájlba kiírásra • Használat: StreamWriter w = createWriter(“file.txt”); • Eljárások: • print() • println() • flush() • close()
Fájl input • String[] loadStrings(<file_name>): • Betölti a paraméterben kapott fájlt soronként, visszaadja a beolvasás eredményét • Használat: • String lines[] = loadStrings("szoveg.txt");
Szövegek feldolgozása • String[] split(str, delim): • String gy = "alma, korte”;String[] l = split(gy, ','); • String[] splitTokens(str, delims): • String gy = "alma, korte; eper”;String[] l = splitTokens(gy,“,;”);
String osztály • Eljárások Java-ból ami ismerős: • substring(int fi, int li); • trim() • … • Számmá alakítás: • parseInt(s); • parseFloat(s);
Feladat 3 • Az „s” billentyű lenyomására lehessen fájlba menteni az aktuális állapotot! • Az „l” billentyű segítségével pedig töltsük vissza a legutóbbit!
Szövegkirajzolás • PFont: • A Processing karakterkészlet osztálya • Használat: PFont fnt = createFont("Arial", 12); • textFont(PFont): • Az aktuális kirajzolási karakterkészletet a paraméterben kapottra módosítja • text(str, x, y[, w, h, z]) • textSize(int)
Szövegkirajzolás • textAlign(xAlign, yAlign): vízszintes és függőleges szövegigazítás, lehetséges értékei LEFT, CENTER, RIGHT • loadFont(fájlnév): külső fájlból tölthetünk be vele karaterkészletet PFontfnt = loadFont("font.flw");
Példa void setup() { size(600,600); PFont fnt = createFont("Arial",20) ; textFont(fnt) ; } void draw() { text("Helló",100,100) ; }
Feladat 4 • Minden kattintásra annak helyére írjátok ki a kattintás gombját és pozicióját.
Osztályok • Osztályok definiálása szokásos módon: class OsztNev { void fv() {...} int i; }
Osztályok • Az osztály egy példányának létrehozása szintén: OsztNevo = new OsztNev();
Feladat • Írjatok egy PattogoKor osztályt! • Legyen szín és sugár jellemzője • Szóköz billentyű megnyomására jöjjön létre egy új pattogó kör, ami a képernyő keretein belül pattog! (véletlen sugár és szín attributumokkal) • NEHEZÍTÉS (Házi Feladat): A körök egymásról is pattanjanak vissza
Feladat • Csináljunk egy Teglalap osztályt! Legyen pozíció és szélesség/magasság, szin adattagja • Szóköz lenyomására jelenjen meg egy a képernyőn (véletlen helyen, véletlen attributumokkal) • A téglalap közepére legyen beleírva színe RGB kódja, és a poziciója • A téglalap kirajzolásáért annak Draw() metódusa feleljen
Feladat / Házi feladat • Jobb gombbal való kattintásra változzon a téglalap kapjon új véletlen színt • Bal egérgombbal lehessen a kiválasztott téglalapot előtérbe hozni • Legyen lehetőség a bal egérgombbal a téglalap vonszolására • Törekedjetek az OOP elvű megvalósításra!