Images

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 3 mars 2007 à 23:02
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 4 mars 2007 à 14:41
Bonjour a tous.
J'ai une classe qui herite de JWindow.
Je veux afficher plusieurs images les unes apres les autres a l'interieur.
voila le code que j'ai fait:

import javax.swing.JWindow;



import javax.swing.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import java.awt.*;
import javax.imageio.stream.*;
import java.util.*;



public class PleinEcran extends JWindow {
 
 static BufferedImage[] IMG = null;
 public int NumImage = 0;
 
 public PleinEcran(){
  //Parametres de la fenetre
  this.setSize(1000, 1000);
  this.setAlwaysOnTop(true);
  this.setLocationRelativeTo(null);
  
  //On recupere et enregistre les images de l'animation
  if (IMG == null)
   IMG = readGifImages("ChargementWindows.gif");
  
  //On lance le processus qui est sancer afficher les images les unes apres les autres
  Thread Afficher = new Thread(){
   public void run(){
    while(true){
     try{
      sleep(300);
      repaint();
     }catch(Exception ex){}
    }
   }
  };
  Afficher.start();
 }
 
 public void paint(Graphics g){
  if(IMG[NumImage].getColorModel().hasAlpha()){
   try{
    Robot robot = new Robot();
    BufferedImage fond = robot.createScreenCapture(getBounds());
    MediaTracker tracker = new MediaTracker(this);
    tracker.addImage(fond,0);
    tracker.waitForAll();
    g.drawImage(fond, 0,0,null);
   }catch(Exception e){e.printStackTrace();}
  }
  g.drawImage((Image)IMG[NumImage],0,0,null);
  
  NumImage ++;
 }
 
 
 public static BufferedImage[] readGifImages(String f) {
        BufferedInputStream in = null;
        //stream image
        ImageInputStream stream = null;
        try{
            in = new BufferedInputStream(new FileInputStream(new File(f)));
            stream = ImageIO.createImageInputStream(in);
        }catch (IOException e) {
            return  null;
        }



        //reader d'image'
        ImageReader r=getReader("GIF");
        if (r==null) return  null;



        //tableau dynamique des images
        ArrayList img = new ArrayList();
        try{
            r.setInput(stream, true, true);
            ImageReadParam param = r.getDefaultReadParam();



            //lecture des images : tant qu'il y a pas d'exception
            try{
                int i = 0;
                while(true){
                    img.add(r.read(i,param));
                    i ++;
                }
            }catch(Exception e2){}
           
            r.dispose();
            in.close();
        }catch(Exception e){
            return  null;
        }
       
        return  img.toArray(new BufferedImage[img.size()]);
    }
   
    private static  ImageReader getReader(String format) {
        Iterator readers = ImageIO.getImageReadersBySuffix(format);
        if (readers.hasNext()) {
            ImageReader reader = (ImageReader) readers.next();
            return reader;
        }
        return  null;
    }
 
 
 public static void main (String arg[]){
  new PleinEcran().setVisible(true);
 }
}


merci a tous de votre aide.
je bloque dessus depuis ....
merci..

3 réponses

cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
4 mars 2007 à 11:01
Le mieu serai d expliquer un peu ton probléme ;o)  ;o) ..
Cependant ;o) je peu déjà à une premiere lecture te conseiller d utiliser la class ImageIcon ;o) trés pratique pour un chargement simplifié d image qui évite l utilisation de thread et de MediaTracker ce que du reste tu n utilise pas  ;o) dans le chargemetn de tes images.. ;o)

de plus ;o) si tu veux fair eun effet de trnasparence ;o) centre ton image ce sera plus joli .. ;o)
et je ne suis pas sur que l utilisation d un MediaTracker soit nécessaire avec pour l image provenant de Robot, dans tous les cas le waitForAll ;o) est fortement déconseiller ;o) dans la mehtode paint ;o) ..

Et que diable !!!!  IMG n est pas une constante donc l emploi des minuscules EST de rigueur....

;o) bon courage ... si j ai 2 min je le compilerai ;o)

[purple]GodConan/purple[:o)]
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 mars 2007 à 11:26
Salut,

pas mieux que [auteurdetail.aspx?ID=190746 GodConan]<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" /><title></title><meta name="GENERATOR" content="OpenOffice.org 2.1 (Linux)" /><meta name="AUTHOR" content="twins Twinuts" /><meta name="CREATED" content="20070304;11242700" /><meta name="CHANGED" content="16010101;0" /><style><!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
--></style> , merci de précisé ton
problème.

Avec la classe robot tu n'as pas besoin
de passer par un tracker vu qu'il te donne soit null soit une image
déjà chargée (au passage trouve un moyen pour
éviter des faire trop de captures d'écran sinon ça
va pas être super rapide et tu passeras tout ton temps dans la
récupération de la capture...) autre chose dans la
méthode drawImage tu n'est pas obligé de faire un cast
BufferedImage -> Image.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
4 mars 2007 à 14:41
ok. merci.
Mon pb c'etait que j'avais un gif anime et que je voulais l'afficher dans une JWindow.
j'ai reussit a trouver un compromis.

merci quand meme a vous deux.
0
Rejoignez-nous