Une petite source montrant comment lire toutes les images d'un gif animé...
(je sais pas si ça deja été posté... pourtant j'ai cherché! désolé aux admins sinon... :)
Source / Exemple :
/**
- lit les images d'un gif animé
@param f l'image gif
@return le tableau d'images ou null si erreur
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 lues
ArrayList<BufferedImage> img=new ArrayList<BufferedImage>();
try{
r.setInput(stream,true,true);
ImageReadParam param = r.getDefaultReadParam();
//lecture des images
try{
int i=0;
//on lit tant qu'il y a pas d'exceptions !
while(true)
{
//lecture et ajout
img.add(r.read(i,param));
i++;
}
}catch(Exception e2) {}
r.dispose();
in.close();
}catch(Exception e)
{
return null;
}
//retourne un tableau
return img.toArray(new BufferedImage[img.size()]);
}
/**
- donne le reader correspondant au format
@param format le format désiré (voir ImageIO.write)
@return le reader correspondant ou null si erreur
private static ImageReader getReader(String format)
{
Iterator readers = ImageIO.getImageReadersBySuffix(format);
if (readers.hasNext())
{
ImageReader reader = (ImageReader) readers.next();
return reader;
}
return null;
}
Conclusion :
Ne pas oublier les import :
import java.io.*;
import javax.swing.*;
import javax.imageio.*;
import javax.imageio.stream.*;
import java.util.*;
import java.awt.image.*;
Pour charger une image gif, suffit d'executer par exemple readGifImages("chat.gif") pour avoir toutes les images du gif animé chat.gif
19 déc. 2007 à 17:02
Alors je suis interessé par la réponse à la question qu'a posé JavaTfairelaPo : comment récupérer les coordonnées du bout d'image qui a changé ??
20 mars 2007 à 18:53
J'ai quand même un souci quand à l'affichage de mes images; le fond n'est pas codé avec l'image (traduire : seule la partie qui doit être rafraichie est dans le gif).
Comment récupérer les coordonnées permettant d'afficher, par exemple, l'image 1 par rapport à l'image 0?
Tu as certainement été confronté au problème, comment l'as-tu résolu?
20 mars 2007 à 12:35
Je me suis rendu compte que mon erreur venait de l'instruction :
in=new BufferedInputStream(new FileInputStream(new File(f)));
Je récupère directement une IOException et donc null !
(Je préfèrerai donner une URI ou URL en argument --> bibi en galère)
Je ne récupère donc pas null en sortie de getReader.
19 mars 2007 à 18:47
ImageIO.getReaderFormatNames();
qu'est ce qu'il te retourne ?
bon courage
19 mars 2007 à 12:16
Merci pour ta source et tes conseils futurs...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.