3
public void paint(Graphics g) {
g.drawImage(uneImage, x0, y0, unImageObserver);
}
Afin de réafficher le composant une fois que l’image a été chargée, il est nécessaire de choisir
l’ImageObserver à fournir en paramètre, le plus simple étant de donner le Component lui-
même (this).
Bien que tout composant puisse afficher une image, il est conseillé pour commencer de
choisir une Applet ou une Frame.
4 Accès aux pixels d’une image (Image -> int[])
L’accès aux valeurs des pixels d’une image consiste est réalisé par un ImageConsumer
particulier : le PixelGrabber.
Les pixels de l’image sont extraits dans un tableau d’entiers à une dimension et contenant le
autant de cases que de pixels dans l’image (stockage par ligne) :
int[] pixels = new int[width * height];
Note: un int[] est un objet (au sens de Java). Par conséquent, l’affectation "int[] a = b;" ne
copie pas le tableau b dans le tableau a (deep copy), mais effectue une copie de référence
(shallow copy) : les deux tableaux pointent donc sur les même données. Donc, lorsqu’on
modifie l’un, ça modifie l’autre puisqu’il s’agit du même tableau. Pour effectuer une deep
copy, utiliser System.arraycopy().
Chaque pixel est code sur un int de 32 bits dont la représentation est la suivante1 :
31............. 24 23 ............ 16 15 ..............8 7.................0
alpha red green blue
La valeur alpha indique le niveau de transparence du pixel (0=transparent, 255=opaque). Les
valeurs red, green et blue indiquent le niveau des couleurs de base (0=0% de couleur de base,
255=100% de couleur de base). Les pixels sont acquis de la manière suivante :
PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pixels, 0, width);
try {
pg.grabPixels();
} catch (InterruptedException e) {
System.err.println("interrupted waiting for pixels!");
}
Il est possible d'utiliser les opération de manipulation de bits sur chaque pixel (<< = shift à
gauche, >> = shift à droite, & = and, | = or).
5 Création d’une image (int[] -> Image)
Java ne permet pas d'afficher directement une image sous forme de tableau d'entiers mais
uniquement les objets de la classe Image. Pour cela, il faut convertir le tableau d'entier en
1 Dans le cours d’imagerie, cela correspond à la description du § I.3.4.4 avec N=24 et K=32. Dans Windows XP,
c’est en général aussi comme cela que les couleurs sont codées (Propriétés d’affichage/Paramètres/Qualité
couleur : optimale (32 bits) ).