La creation d'image en java , dans des applets.
Attention, 3 types d'images, créées de manière différentes.
- A partir d'un fichier avec getImage()
Image imgFond = getImage(getCodeBase(),"fond.jpg");
ou Image imgFond = getImage("im0.gif");
Méthode utilisable seulement par la classe Applet (ou Toolkit)
On l'anime en superposant une suite d'images dans l'écran Graphics g.
- A partir d'un ImageProducer avec createImage()
ImageProducer producer ;
Image img = createImage(producer) ;
C'est une méthode de la classe java.awt.Component donc d'Applet, de Container,
Panel,Canvas...
- L'ImageProducer peut etre soit un MemoryImageSource pour créer l'image à partir
d'un tableau d'entiers pixels[] ou chaque entier contient les 4
octets alpha,R V et B.
MemoryImageSource source ;
source = new MemoryImageSource(w, h, pixels, 0, w) ;
Image img = app.createImage(source) ;
On peut en plus l'animer en rajoutant juste apres la création du MemoryImageSource :
source.setAnimated(true) ;
et pour modifier l'image il suffit de modifier le tableau pixel[] et d'en
informer la source par newPixel() :
pixel[i] = ...
source.newPixels(x, y, w, h) ;
- Ou soit un FilteredImageSource : exemple de filtre, la classe filtre doit
comporter la méthode filterRGB()
class FiltreInv extends RGBImageFilter
{
public FiltreInv()
{
canFilterIndexColorModel = true;
}
public int filterRGB(int x, int y, int rgb) {
rgb = rgb modifie...;
return rgb ;
}
}
Image imgFiltree, img ;
FiltreInv filtreInv = new FiltreInv() ;
ImageProducer prod = img.getSource() ;
imgFiltree = createImage(new FilteredImageSource(prod,filtreInv));
- SEULEMENT POUR LE DOUBLE BUFFERING.
avec createImage(int, int)
Crée une image hors écran dans laquelle on peut dessiner pour le double
buffering.
Image imgTampon =
createImage(getSize().width,getSize().height) ;
Graphics gTampon = imgTampon.getGraphics() ;
Méthode de la classe java.awt.Component donc d'Applet, de Container, Panel,
Canvas...
C'est le seul cas ou on utilise g=getGraphics() .
L'applet gomme utilise les 3 types.
Les containers
Window -- Frame
-- Dialog
-- FileDialog
Panel
-- Applet
Le gestionnaire de mise en page par défaut est :
FlowLayout pour les Panels.
BorderLayout pour les Frames.
|