Sunteți pe pagina 1din 6

IMAGINI EXTERNE

In Java AWT este posibil\ folosirea imaginilor create extern n format gif sau jpeg. Folosirea imaginilor se realizeaz\ prin intermediul clasei Image. Aceasta nu este o clas\ de componente (nu extinde clasa Component) ci implementeaz\ obiecte care pot fi desenate pe suprafa]a unor componente cu metode specifice unui context grafic pentru componenta respectiv\ (similar modului cum se deseneaz\ o linie sau un cerc). Clasa Image Variabile

UndefinedProperty The UndefinedProperty object should be returned whenever a property which was not defined for a particular image is fetched.

Constructor
Image ()

Metode

flush () Flushes all resources being used by this Image object. getGraphics() Gets a graphics object to draw into this image. getHeight(ImageObserver) Gets the actual height of the image. getProperty(String, ImageObserver) Gets a property of the image by name. getSource() Gets the object that produces the pixels for the image. getWidth(ImageObserver) Gets the actual width of the image.

Dup\ cum am v\zut afi[area unei imagini ntr-un context grafic se realizeaz\ cu metoda drawImage din clasa Graphics. Prototipul acestei func]ii este :
public abstract boolean drawImage(Image img, int x, int y, ImageObserver observer)

Exemplu - afi[area unei imagini ntr-un applet


import java.awt.*;

import java.applet.*; import java.net.*; public class TestImage1 extends Applet { Image img; URL adresa; public void init() { try { adresa = new URL("file:/d:/java_app/diverse/clouds.gif"); } catch (MalformedURLException e) { showStatus(Eroare URL); } img = getImage(adresa); } public void paint(Graphics g) { g.drawImage(img, 0, 0, this); } }

In acest exemplu pentru a ob]ine un obiect de tipul Image s-a folosit metoda java.applet.getImage care prime[te drept parametru o adres\ URL. Formatul acestei metode este : public Image getImage(URL url) sau
public Image getImage(URL url, String name), parametrul url specific\ localizarea fi[ierului n WWW iar name

define[te [irul de caractere ce reprezint\ numele imaginii: Ex: getImage(getDocumentBase(), clouds.gif) (Metoda getDocumentBase() a clasei Applet reg\se[te obiectul director care con]ine fi[ierul executabil al appletului)

In cazul n care dorim s\ afi[\m o imagine n fereastra unei aplica]ii independente va trebui s\ folosim o alt\ modalitate de a ob]ine obiectul de tip imagine. In acest caz se utilizeaz\ metoda getImage a clasei Toolkit, care are urm\torul format: public abstract Image getImage(String filename) sau
public abstract Image getImage(URL url)

Clasa Toolkit [i subclasele sale sunt utile pentru ob]inerea informa]iilor despre monitor, pentru a determina fonturile acceptate de o anumit\ platform\ [i a crea elemente de afi[aj cum sunt butoanelem imaginile, castele de dialog, etc. Ea ofer\ fiec\rei platforme suport pentru interfa]a GUI (Graphical User Interface) din Java.

Clasa Toolkit Constructor


Toolkit ()

Metode (selectiv)

checkImage (Image, int, int, ImageObserver) Monitorizeaz\ stadiul(evolu]ia) unei imagini pe o anumit\ n\l]ime [i l\]ime a ecranului getColorModel() Determin\ schema de culoare a ecranului getDefaultToolkit() Returneaz\ kitul cu instrumente implicit. getFontList() Intoarce lista fonturilor disponibile pe platforma curent\ getFontMetrics(Font) Returneaz\ configura]ia metric\ a unui anumit font getImage(String) Ofer\ o imagine din fi[ierul specificat getImage(URL) Ofer\ o imagine de la adresa specificat\ getScreenResolution() Valoarea rezolu]iei ecranului in puncte pe inci getScreenSize() Afl\ dimensiunile ecranului, exprimate n pixeli prepareImage(Image, int, int, ImageObserver) Preg\te[te afi[area pe ecran a unei imagini, avnd lungimea [i l\]imea specificate. sync() Sincronizeaz\ imaginile grafice curente, astfel nct acestea s\ func]ioneze mpreun\. Util\ la crearea secven]elor animate.

Ob]inerea unui obiect de tip imagine dintr-un fi[ier se realizeaz\ a[adar astfel:
Image img img = Toolkit.getDefaultToolkit().getImage(clouds.gif)

Afi[area imaginilor pe o suprafa]\ grafic\ se realizeaz\, de obicei, prin intermediul unei componente de tip Canvas, Exemplu - afi[area unei imagini ntr-o fereastr\
import java.awt.*; import java.awt.event.*; public class TestImage2 { public static void main(String args[]) { ImageCanvas ic;

Frame f = new Frame("O imagine"); ic = new ImageCanvas("clouds.gif", 400)); f.add(ic); f.pack(); f.setVisible(true);

new Dimension(400,

} } class ImageCanvas extends Canvas { private Dimension imgSize = new Dimension(-1, -1); private transient Image img = null; private Dimension canvasSize = null; public ImageCanvas(String file, Dimension canvasSize) { img = Toolkit.getDefaultToolkit().getImage(file); this.canvasSize = canvasSize; } public void paint(Graphics g) { imgSize.width = img.getWidth(this); imgSize.height = img.getHeight(this); int x = (canvasSize.width - imgSize.width) / 2; int y = (canvasSize.height - imgSize.height) / 2; g.drawImage(img, x, y, this); g.drawRect(0, 0 , canvasSize.width-1, canvasSize.height-1); } public public public public } } Dimension getMinimumSize() { return canvasSize; } Dimension getMaximumSize() { return canvasSize; } Dimension getPreferredSize() { return canvasSize; } void setSize(Dimension newCanvasSize) { canvasSize = newCanvasSize;

In ambele exemple se va observa c\ imaginea nu apare complet\ de la nceput ci este desenat\ treptat f\r\ interven]ia programatorului. Acest lucru se ntmpl\ deoarece metoda getImage() nu face dect s\ declan[eze procesul de nc\rcare a imaginii, dup\ care red\ imediat controlul apelantului. Acest lucru este util, ntruct procesul de nc\rcare a unei imagini poate dura mult (ex:atunci cnd imaginea este preluat\ din re]ea) [i nu este de dorit ca n acest interval de timp (pn\ la nc\rcarea complet\ a imaginii) aplica]ia s\ fie blocat\. Ca urmare n metoda paint() va fi desenat\ numai por]iunea de imagine care este disponibil\ la un moment dat [i care poate fi incomplet\. De aceea trebuie s\ existe un mecanism prin care componenta s\ fie redesenat\ n momentul n care au mai sosit informa]ii legate de imagine.

Acest mecanism este realizat prin intermediul interfe]ei ImageObserver, implementat\ de clasa Component [i deci [i de toate subclasele lui Component. Aceast\ interfa]\ specific\ obiecte care au nceput s\ utilizeze o imagine incomplet\ [i care trebuie anun]ate de noile date ob]inute n leg\tura cu imaginea respectiv\. Monitorizarea nc\rc\rii imaginilor - Interfa]a ImageObserver Interfa]a are o singur\ metod\ imageUpdate apelat\ periodic de firul de execu]ie (creat automat) care se ocup\ cu nc\rcarea imaginii.
imageUpdate ( Image img, int flags, int x, int y, int w, int h )

Implementarea implicit\ const\ ntr-un apel la repaint() pentru dreptunghiul specificat la apel [i care reprezint\ zona din imagine pentru care se cunosc noi informa]ii. Intregul flags furnizeaz\ informa]ii despre starea transferului. Aceste informa]ii pot fi aflate prin intermediul constantelor definite de interfa]\. Acestea sunt :
ABORT Inc\rcarea imaginii a fost ntrerupt\, nainte de completarea ei. ALLBITS Imaginea a fost nc\rcat\ complet ERROR A ap\rut o eroare n timpul nc\rc\rii imaginii. FRAMEBITS Totii bitii cadrului curent sunt disponibili HEIGHT In\l]imea imaginii este disponibil\ PROPERTIES Propriet\]ile imaginii sunt disponibile SOMEBITS More pixels needed for drawing a scaled variation of the image are available. WIDTH In\l]imea imaginii este disponibil\

Prezen]a n flags a unui bit de valoare 1 pe pozi]ia reprezentat\ de o constant\ nseamn\ c\ respectiva condi]ie este ndeplinit\.

Exemple :
(flags & ALLBITS) != 0 imaginea eset complet\ (flags & ERROR | ABORT ) != 0 a ap\rut o erorare sau

transferul imaginii a fost ntrerupt Metoda imageUpdate poate fi redefint\ pentru a personaliza afi[area imaginii. Pentru aceasta implement\m clasei ImageCanvas, definit\ anterior, metoda imageUpdate, care va fi apelat\ asincron de fiecare dat\ cnd sunt disponibili noi pixeli. Exemplu
public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { //se deseneaza imaginea numai daca toti bitii sunt disponibili if (( flags & ALLBITS) != 0) { repaint(); } //daca am toti bitii nu mai sunt necesare noi update-uri return ( (flags & (ALLBITS | ABORT)) == 0); }

S-ar putea să vă placă și