Szerver oldali Java programozás 2007-08/II. 3. óra Java grafikai lehetőségek Java grafikai lehetőségek Képek generálása servletekkel szenasi.sandor@nik.bmf.hu
Adatbázisok elérése Témakörök Java grafikai lehetőségek Képek generálása servletekkel 2
Szükséges csomagok java.awt.color különböző színterekkel kapcsolatos osztályok java.awt.font betűtípusokkal és azok használatával kapcsolatos osztályok java.awt.geom kétdimenziós grafikai elemeket reprezentáló osztályok java.awt.print nyomtatással kapcsolatos funkciók java.awt.image képkezelő funkciók (képformátumok) java.awt.image.renderable megjelenítésfüggetlen kép előállítását segítő osztályok 3
Graphics osztály A rajzolási műveletek egy Graphics nevű (illetve a későbbiekben azt felváltó, Graphics2D nevű) osztályon keresztül érhetők el A Graphics objektum attribútumainak beállításával lehet beállítani a rajzolás paramétereit, mint pl.: Kontúr szélessége, kapcsolódás módja Kitöltésnél használt szín, színátmenet, minta Rajzolás minősége Eltolás, elforgatás módja Megjelenítendő terület kiválasztása Kombinálás módja Ilyen objektumhoz hozzá lehet férni a grafikus felhasználói felület használata esetén a rajzolást támogató komponenseken keresztül (azok felülete), illetve a memóriában létrehozott kép objektumokon keresztül (BufferedImage osztály) 4
Kontúr rajzolása Szín beállítása void setcolor(color) További beállítási lehetőségek Egy Stroke interfészt megvalósító objektum reprezentál egy lehetséges kontúrrajzolási módot, ez az alábbi attribútumokat jelenti: kontúr szélessége végpontoknál alkalmazott dekoráció két kontúr összekapcsolási módját Erre a célra hozták létre a BasicStroke osztályt, amelynek konstruktorában meg lehet adni a fenti paramétereket, majd a Graphics objektum setstroke metódusával lehet a rajzoláshoz kiválasztani 5
Kitöltés rajzolása Szín beállítása void setcolor(color) További beállítási lehetőségek Egy Paint interfészt megvalósító objektum reprezentál egy lehetséges kitöltési módot, egy ilyet a setpaint metódussal lehet kiválasztani Lehetőség van mintával való kitöltésre, erre használatható a TexturePaint osztály, ennek paraméterei: textúrát tartalmazó kép textúra mérete Színátmenetes kitöltés esetén használható a GradientPaint osztály, amely konstruktorában átadható paraméterek: színátmenet kiinduló színe kiinduló színhez tartozó koordináták színátmenet vég színe végső színhez tartozó koordináták 6
Graphics objektum rajzoló funkciói Kontúrok rajzolása drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int width, int height) drawroundrect(int x, int y, int width, int height, int arcwidth, int archeight) drawoval(int x, int y, int width, int height) drawstring(string str, int x, int y) drawpolygon(int[] xpoints, int[] ypoints, int npoints) stb. (lásd Java API Graphics osztály) Kitöltött alakzatok rajzolása fillrect(int x, int y, int width, int height) fillroundrect(int x, int y, int width, int height, int arcwidth, int archeight) filloval(int x, int y, int width, int height) fillpolygon(int[] xpoints, int[] ypoints, int npoints) fillarc(int x, int y, int width, int height, int startangle, int arcangle) stb. (lásd Java API Graphics osztály) 7
Adatbázisok elérése Témakörök Java grafikai lehetőségek Képek generálása servletekkel 8
Servlet visszatérési értéke Az eddigi gyakorlatok során a servlet mindig egy szöveget generált (egyszerű szöveges kimenetet, vagy html állományt), azonban lehetőség van nem szöveges kimenet megadására is Ehhez meg kell adni a kimenet megfelelő MIME típusát, egy jpeg kép esetén pl.: res.setcontenttype("image/jpeg"); Ebben az esetben a kimenetet nem a megszokott PrintWriter objektumon keresztül, hanem egy kimenő streamen keresztül kell átadni, ehhez a HttpServletResponse objektumon keresztül lehet hozzáférni: response.getoutputstream() A kimenet írása a streameknél megszokott módon történik (lásd Java programozái nyelv 5. óra anyaga) 9
Kép konverziók A böngészők csak az általuk ismert képformátumokat képesek megjeleníteni, miatt célszerű a generált képeket a szabványos formátumokban továbbítani (tipikusan jpeg, gif képek) A Java nyelv beépített osztálykönyvtára számos konverziós lehetősget ad, ezek közül a számunkra legegyszerűbb az alábbi módon használható (ImageIO osztály write metódusa): BufferedImage bufferedimage = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB); Graphics g = bufferedimage.getgraphics(); res.setcontenttype("image/jpeg"); ImageIO.write(bufferedImage, "jpg", response.getoutputstream()); 10
Kép beágyazása Az így generált kép megjeleníthető: egyedülálló képként HTML oldalba ágyazva Egyedülálló képkent az böngésző közvetlenül a gépet generáló servletre hivatkozó URL-t tölt le, így a megadott képet közvetlenül meg is jeleníti Amennyiben a kép egy HTML oldal része, akkor a HTML oldalban kell elhelyezni a szokásos kép hivatkozás elemet (img src= ), majd biztosítani a forrásban megadott kép generálását A HTML oldal letöltése és a kép letöltése tehát két különböző kérésként fog megjelenni a szerver oldalon, a fejlesztőnek kell biztosítania, hogy a képet generáló szervlet is rendelkezzen a generáláshoz szükséges adatokkal 11
http://java.sun.com/javaee/5/docs/api/ 12