L'applet Java est couramment utilisée pour afficher les images stockées dans des fichiers GIF. Il est très simple de charger des images GIF dans Java Applet. Lorsque vous utilisez des fichiers image dans Applet, vous devez définir l'objet Image. La plupart des applets Java utilisent des fichiers image au format GIF ou JPEG. L'applet utilise la méthode getImage pour associer le fichier image à l'objet Image.
La méthode drawImage de la classe Graphics est utilisée pour afficher les objets Image. Afin d'améliorer l'effet d'affichage des images, de nombreuses applets utilisent la technologie de double tampon : chargez d'abord l'image dans la mémoire, puis affichez-la à l'écran.
L'applet peut déterminer la quantité d'image déjà en mémoire grâce à la méthode imageUpdate.
Chargement d'une image
Java traite les images comme des objets Image, donc lors du chargement d'une image, vous devez d'abord définir l'objet Image. Le format est le suivant :
Image image ;
puis utiliser la méthode getImage pour connecter l'objet Image et le fichier image :
Picture=getImage(getCodeBase( ),"ImageFileName.GIF");
La méthode getImage a deux paramètres. Le premier paramètre est un appel à la méthode getCodeBase, qui renvoie l'adresse URL de l'applet, telle que www.sun.com/Applet . Le deuxième paramètre spécifie le nom du fichier image à charger à partir de l'URL. Si le fichier image se trouve dans un sous-répertoire sous l'applet, le chemin du répertoire correspondant doit être inclus dans le nom du fichier.
l'
Applet peut utiliser la méthode drawImage de la classe Graphics pour afficher l'image. La forme est la suivante :
g.drawImage(Picture,x,y,this) ;
spécifiez l'image à afficher. Les coordonnées x et y du coin supérieur gauche de l'image et ce.
Le but du quatrième paramètre est de spécifier un objet qui implémente l'interface ImageObServer, c'est-à-dire un objet qui définit la méthode imageUpdate (cette méthode est abordée plus loin).
Afficher l'image (ShowImage.java)
// Liste des programmes sources
importer java.awt.* ;
importer java.applet.* ;
la classe publique ShowImage étend l'applet
Image image ; //Définir les variables membres de type Image
initialisation vide publique()
{
Picture=getImage(getCodeBase(),"Image.gif"); //Charger l'image
}
peinture du vide public (graphiques g)
{
g.drawImage(picture,0,0,this); //Afficher l'image
}
}
Pour cette raison, les instructions concernant l'applet dans le fichier HTML sont les suivantes :
<HTML>
<TITRE>Afficher l'applet d'image</TITRE>
<APPLET
CODE="ShowImage.class" //Le nom du fichier de classe est ShowImage.class
LARGEUR=600
HAUTEUR=400>
</APPLET>
</HTML>
Lors de l'exécution de l'applet après compilation, l'image n'est pas créée d'un seul coup. En effet, le programme ne charge pas et n'affiche pas complètement l'image avant le retour de la méthode drawImage. En revanche, la méthode drawImage crée un thread qui s'exécute simultanément avec le thread d'exécution d'origine de l'applet. Il est chargé et affiché en même temps, créant ainsi cette discontinuité. Afin d'améliorer l'effet d'affichage. De nombreuses applets utilisent la technologie de double mise en mémoire tampon d'image, c'est-à-dire que l'image est entièrement chargée dans la mémoire puis affichée à l'écran, de sorte qu'elle puisse être affichée en une seule fois.
Images à double tampon
Afin d'améliorer l'effet d'affichage des images, la technologie à double tampon doit être utilisée. L'image est d'abord chargée en mémoire puis affichée dans la fenêtre Applet.
Exemple d'utilisation de la technologie d'image à double tampon (BackgroundImage.java)
// Liste des programmes sources
importer java.awt.* ;
importer java.applet.* ;
classe publique BackgroundImage étend l'applet // Hériter l'applet
{
Image d'image ;
Booléen ImageLoaded=false ;
initialisation vide publique()
{
Picture=getImage(getCodeBase(),"Image.gif"); //Charger l'image Image offScreenImage=createImage(size().width,size().height);
//Créer un objet image graphique à l'aide de la méthode createImage offScreenGC=offScreenImage.getGraphics(); //Obtenir l'objet graphique offScreenGC.drawImage(picture,0,0,this);
peinture du vide public (graphiques g)
{
si (ImageChargée)
{
g.drawImage(picture,0,0,null); //Afficher l'image, le quatrième paramètre est nul, pas celui-ci
showStatus("Terminé");
}
autre
showStatus("Chargement de l'image");
}
imageUpdate booléenne publique (Image img, int infoflags, int x, int y, int w, int h)
{
si(infoflags= =ALLBITS)
{
imageLoaded=true;
repeindre();
renvoie faux ;
}
autre
renvoie vrai ;
}
}
L'analyse de la méthode init de l'applet montre que la méthode définit d'abord un objet Image nommé offScreenImage et lui affecte la valeur de retour de la méthode createImage, puis crée un objet Graphics nommé offScreenGC et lui affecte un environnement graphique - un environnement non-écran. l’image sera produite par celui-ci. Étant donné que l'image hors écran est dessinée ici, aucune image ne sera affichée dans la fenêtre de l'applet.
Chaque fois que l'applet appelle la méthode drawImage, drawImage crée un thread qui appelle la méthode imageUpdate. L'applet peut déterminer la quantité d'image qui a été chargée en mémoire dans la méthode imageUpdate. Le thread créé par drawImage continue d'appeler la méthode imageUpdate jusqu'à ce que la méthode renvoie false.
Le deuxième paramètre infoflags de la méthode imageUpdate permet à l'applet de savoir comment l'image est chargée en mémoire. Ce paramètre est égal à ImageLoaded et est défini sur true et la méthode repaint est appelée pour redessiner la fenêtre Applet. Cette méthode renvoie finalement false pour empêcher le thread d'exécution drawImage d'appeler à nouveau la méthode imageUpdate.
Le fonctionnement de l'applet dans la méthode paint est contrôlé par la variable ImageLoaded. Lorsque cette variable devient vraie, la méthode paint appelle la méthode drawImage pour afficher l'image. Lorsque la méthode paint appelle la méthode drawImage, elle prend null comme quatrième paramètre, ce qui empêche drawImage d'appeler la méthode imageUpdate. Étant donné que l'image a été chargée dans la mémoire à ce moment-là, l'affichage de l'image dans la fenêtre Applet peut être effectué en une seule fois.