Sunteți pe pagina 1din 4

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 suprafaa 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 vzut afiarea unei imagini ntr-un context grafic se realizeaz cu metoda drawImage
din clasa Graphics. Prototipul acestei funcii este :
public abstract boolean drawImage(Image img, int x, int y,
ImageObserver observer)
Exemplu - afiarea 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);
}
}
1

Imagini
In acest exemplu pentru a obine un obiect de tipul Image s-a folosit metoda java.applet.getImage
care primete 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 fiierului n WWW iar name definete irul de caractere ce
reprezint numele imaginii:
Ex: getImage(getDocumentBase(), clouds.gif)
(Metoda getDocumentBase() a clasei Applet regsete obiectul director care conine fiierul
executabil al appletului)
In cazul n care dorim s afim o imagine n fereastra unei aplicaii independente va trebui
s folosim o alt modalitate de a obine obiectul de tip imagine. In acest caz se utilizeaz metoda
getImage a clasei Toolkit, care are urmtorul format:
public abstract Image getImage(String filename) sau
public abstract Image getImage(URL url)
Clasa Toolkit i subclasele sale sunt utile pentru obinerea informaiilor despre monitor,
pentru a determina fonturile acceptate de o anumit platform i a crea elemente de afiaj cum
sunt butoanelem imaginile, castele de dialog, etc. Ea ofer fiecrei platforme suport pentru
interfaa GUI (Graphical User Interface) din Java.
Clasa Toolkit
Constructor
Toolkit ()
Metode (selectiv)
checkImage (Image, int, int, ImageObserver)
Monitorizeaz stadiul(evoluia) unei imagini pe o anumit nlime i lime 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 configuraia metric a unui anumit font
getImage(String)
Ofer o imagine din fiierul specificat
getImage(URL)
Ofer o imagine de la adresa specificat
getScreenResolution()
Valoarea rezoluiei ecranului in puncte pe inci
getScreenSize()
Afl dimensiunile ecranului, exprimate n pixeli
prepareImage(Image, int, int, ImageObserver)
Pregtete afiarea pe ecran a unei imagini, avnd lungimea i limea specificate.
sync()
Sincronizeaz imaginile grafice curente, astfel nct acestea s funcioneze
mpreun. Util la crearea secvenelor animate.
Obinerea unui obiect de tip imagine dintr-un fiier se realizeaz aadar astfel:
Image img
img = Toolkit.getDefaultToolkit().getImage(clouds.gif)
Afiarea imaginilor pe o suprafa grafic se realizeaz, de obicei, prin intermediul unei
componente de tip Canvas,
Exemplu - afiarea unei imagini ntr-o fereastr
import java.awt.*;
import java.awt.event.*;
2

Imagini
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
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 fr intervenia programatorului. Acest lucru se ntmpl deoarece metoda
getImage() nu face dect s declaneze procesul de ncrcare a imaginii, dup care red imediat
controlul apelantului. Acest lucru este util, ntruct procesul de ncrcare a unei imagini poate dura
mult (ex:atunci cnd imaginea este preluat din reea) i nu este de dorit ca n acest interval de
timp (pn la ncrcarea complet a imaginii) aplicaia s fie blocat.
Ca urmare n metoda paint() va fi desenat numai poriunea 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 informaii legate de
imagine.
Acest mecanism este realizat prin intermediul interfeei 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 anunate de noile date obinute n
legtura cu imaginea respectiv.
Monitorizarea ncrcrii imaginilor - Interfaa ImageObserver
Interfaa are o singur metod imageUpdate apelat periodic de firul de execuie (creat automat)
care se ocup cu ncrcarea imaginii.
imageUpdate (
Image img, int flags,
int x, int y, int w, int h )
3

Imagini
Implementarea implicit const ntr-un apel la repaint() pentru dreptunghiul specificat la
apel i care reprezint zona din imagine pentru care se cunosc noi informaii. Intregul flags
furnizeaz informaii despre starea transferului. Aceste informaii pot fi aflate prin intermediul
constantelor definite de interfa. Acestea sunt :
ABORT
Incrcarea imaginii a fost ntrerupt, nainte de completarea ei.
ALLBITS
Imaginea a fost ncrcat complet
ERROR
A aprut o eroare n timpul ncrcrii imaginii.
FRAMEBITS
Totii bitii cadrului curent sunt disponibili
HEIGHT
Inlimea imaginii este disponibil
PROPERTIES
Proprietile imaginii sunt disponibile
SOMEBITS
More pixels needed for drawing a scaled variation of the image are available.
WIDTH
Inlimea imaginii este disponibil
Prezena n flags a unui bit de valoare 1 pe poziia reprezentat de o constant nseamn c
respectiva condiie este ndeplinit.
Exemple :
(flags & ALLBITS) != 0 imaginea eset complet
(flags & ERROR | ABORT ) != 0 a aprut o erorare sau transferul imaginii a fost ntrerupt
Metoda imageUpdate poate fi redefint pentru a personaliza afiarea imaginii. Pentru
aceasta implementm 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