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
[email protected]
Adatbázisok elérése
Témakörök Java grafikai lehetőségek Képek generálása servletekkel
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
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
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
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) http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
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
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
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
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
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) http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
7
Adatbázisok elérése
Témakörök Java grafikai lehetőségek Képek generálása servletekkel
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
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)
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
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());
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
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
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
11
• http://java.sun.com/javaee/5/docs/api/
http://nik.bmf.hu/szoja
Szerver oldali Java programozás 2007-2008/II.
12