Sunteți pe pagina 1din 3

Imagini

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)

1
Imagini

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, având lungimea [i l\]imea specificate.
sync()
Sincronizeaz\ imaginile grafice curente, astfel încât 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", new Dimension(400, 400));
f.add(ic);
f.pack();
f.setVisible(true);
}
}
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 Dimension getMinimumSize() { return canvasSize; }


public Dimension getMaximumSize() { return canvasSize; }

2
Imagini

public Dimension getPreferredSize() { return canvasSize; }


public 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 întâmpl\ deoarece metoda getImage() nu face decât s\ declan[eze procesul de înc\rcare a imaginii,
dup\ care red\ imediat controlul apelantului. Acest lucru este util, întrucât procesul de înc\rcare a unei imagini poate dura mult
(ex:atunci când imaginea este preluat\ din re]ea) [i nu este de dorit ca în acest interval de timp (pân\ 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\ când 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