Lorsque la quantité d'informations d'image est importante et que la méthode d'affichage direct ci-dessus est utilisée, la partie avant peut être affichée et la dernière partie peut être affichée, car cette dernière partie n'a pas été lue à partir du fichier, ce qui fait apparaître l'affichage marbré. Afin d'améliorer l'effet d'affichage, de nombreuses applications utilisent la technologie de mise en mémoire tampon d'image, c'est-à-dire qu'il faut d'abord charger complètement l'image dans la mémoire, dessiner l'image ou les graphiques dans le tampon, puis afficher l'image ou les graphiques dessinés dans le tampon sur l'écran. immédiatement. La technologie de mise en mémoire tampon résout non seulement le problème de scintillement, mais comme l'image est créée dans la mémoire de l'ordinateur, le programme peut effectuer un traitement au niveau des pixels sur l'image et effectuer des transformations complexes avant de l'afficher.
[Exemple] Un petit programme d'application démontre la technologie d'affichage de tampon d'image. Lorsque le programme est en cours d'exécution, lorsque la souris est enfoncée dans la zone de l'image, une bordure apparaîtra sur l'image et lorsque la souris est déplacée, l'image se déplacera en conséquence. Après avoir soulevé la souris, la bordure disparaît. Le programme place d'abord les images dans les deux états dans deux tampons. Lorsque la souris est déplacée, l'image avec le style souris vers le haut est continuellement redessinée à la nouvelle position. Lorsque la souris est relevée, l'image avec le style souris vers le haut est redessinée. .
importer java.applet.*;importer java.awt.*;imprt java.awt.image. * ;importer javax.swing.*;importer java.event.*;classe publique Exemple 7_6 extends Applet{ Image myPicture; ), définissez d'abord un objet Image et attribuez la valeur de retour de la méthode createImage(), puis créez un objet Graphics et attribuez-lui un environnement graphique. Enfin, laissez l'objet Graphics appeler la méthode drawImage() pour afficher l'image. Puisque l'objet Graphics offScreenGc est ici un objet non-écran, aucune image ne sera affichée dans la fenêtre de l'applet*/ public void init(){ myPicture = getImage(getCodeBase(), "myPic.JPG"); (size() .width, size().height); Graphiques offScreenGc = offScreenImage.getGraphics(); BufferedDemo(myPicture); } /*Le quatrième paramètre de la méthode drawImage() est d'implémenter l'interface ImageObserver. Dans la méthode init(), le paramètre pour appeler la méthode drawImage() est celui-ci, l'applet doit donc définir l'imageUpdate. () méthode*/ public boolean imageUpdate(Image img, int infoFlg, int x, int y, int w, int h){ if (infoFlg = ALLBITS){ // Indique que l'image a été entièrement chargée dans la mémoire repaint(); return false; // Empêche le thread d'appeler à nouveau la méthode imageUpdate()} else return true }}/*Le processus d'exécution du programme est quand; l'applet appelle la méthode drawImage(), la méthode drawImage() créera un thread qui appelle la méthode imageUpdate(). Dans la méthode imageUpdate(), il est déterminé si l'image a été partiellement transférée dans la mémoire. Le thread créé continue d'appeler la méthode imageUpdate() jusqu'à ce que la méthode renvoie false. Le paramètre infoFlg permet à l'applet de savoir comment l'image est chargée en mémoire. Lorsque infoFlg est égal à ALLBITS, cela signifie que l'image a été entièrement chargée dans la mémoire. Lorsque cette méthode constate que l'image a été complètement chargée dans la mémoire, elle définit imageLoaded sur true et appelle la méthode repaint() pour redessiner la fenêtre de l'applet. La méthode renvoie false pour empêcher le thread d'appeler à nouveau la méthode imageUpdate(). */class BufferedDemo extends JFrame{ public BufferedDemo(Image img){ this.getContentPane().add(new PicPanel(img)); setTile("Démonstration de la technologie de double mise en mémoire tampon"); ; }}classe PicPane étend JPanel implémente MouseListener, MouseMotionListener{ int x = 0, y = 0, dx = 0, cy = 0 ; BufferedImage bimg1, bimg2 ; boolean upstate = true ; public picPanel(Image img){ this.setBackground(Color.white); bimg1 = nouveau BufferedImage(img.getWidth(this), img.getHeight(this), BufferedImage.TYPE_INT_ARGB); bimg2 = new BufferedImage(img.getWidth(this), img.getHeight(this), BufferedImage.TYPE_INT_ARGB); Graphics2D g2D1 = bimg1.createGraphics(); createGraphics(); g2D1.drawImage(img, 0, 0, ceci); g2D2.drawImage(img, 0, 0, ceci); g2D2.drawRect(1, 1, img.getWidth(this) - 3, img.getHeight(this) - 3); } public void paintComponent(Graphics g){ super.painComponent(g); (Graphics2D)g; if (upState) g2D.drawImage(bimg1, x, y, this); else g2D.drawImage(bimg2.x, y, this } public void mousePress(MouseEvent e){ if (e.getX); () >= x && e.getX() < x + bimg1.getWidth(this) && e.getY() >= y&& e.getY() < y + bimg1.getHeight(this)){ upstate = false; setCursor(Cursor.getPredefinedCursor(Coursor.HAND_CURSOR)); y; repain(); } } public void mouseExited(MouseEvent e){} public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void MouseReleased(MouseEvent e){ this.setCursor(Cursor.getpredefinedCursor(Cursor.DEFAULT_CURSOR)); upState = true repaint( } public void mouseMoved(MouseEvent e); ){} public void mouseDragged(MouseEvent e){ if (!upState){ x = e.getX() - dx; y = e.getY() - dy;
Pour créer une image tampon, le programme doit introduire la classe BufferedImage dans le package java.awt.image. Pour créer une image tampon, appelez la méthode createImage(), qui renvoie un objet Image puis le convertit en objet BufferedImage. Par exemple, codez :
BufferedImage bimage = (BufferedImage)this.createImage(this.getWidth(),this.getHeight());
Vous pouvez également utiliser les méthodes de construction suivantes pour le créer.
BufferedImage (int largeur, int haut, int imageType);
Le paramètre imageType est le type d'image.
Pour utiliser un tampon pour afficher une image, vous devez d'abord préparer l'image dans le tampon, puis afficher l'image dans le tampon sur l'interface. L'affichage d'images nécessite des objets graphiques, qui peuvent être créés via les méthodes suivantes :
Graphics2D g2d = bimge.createGraphics();