Faire tourner un Gif une seule fois.

Faire tourner un Gif une seule fois. - Java - Programmation

Marsh Posté le 17-04-2014 à 08:42:45    

Bonjour !

 

Je poste aujourd'hui car cela fais bientôt un mois que je suis purement et simplement bloqué sur un programme, à l'apparence pourtant facile.
Mon programme est le suivant :

 
Code :
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;
  4. class NewAnimV3 extends JComponent {
  5. public static void main(String[] args) {
  6. //System.setProperty("apple.awt.brushMetalLook", "true" );
  7. JFrame f = new JFrame("" );
  8. NewAnimV3 anim = new NewAnimV3();
  9. //anim.init();
  10. anim.start();
  11. f.getContentPane().add(anim);
  12. f.pack();
  13. f.setVisible(true);
  14. }
  15. Image image;
  16. public void start() {
  17. image=Toolkit.getDefaultToolkit().getImage("C:/Coin_03_june.gif" );
  18. setSize(180,180);
  19. setPreferredSize(new Dimension(180,180));
  20. }
  21. protected void paintComponent(Graphics g) {
  22.     // efface le contenu précédent :
  23.     g.fillRect(0, 0, this.getWidth(), this.getHeight());
  24.    int i;
  25.     // dessine le gif :
  26.    for (i=1; i<=1; i++) {
  27.    g.drawImage(image,0,0,Color.white,this);
  28.    if (i>1) {
  29.     g.drawImage(image,0,0,Color.white,null);
  30.    }
  31. }
  32.     }
  33. }
 

Il anime mon image gif, et je suis déjà satisfaite avec sa. Cependant, je désire l'animer une fois car il sera lancé par un autre programme (un Pile ou Face). C'est pourquoi j'ai besoin que mon gif s'anime seulement une fois.

 

Pourrais-je avoir de l'aide ? J'ai beau me triturer les méninges et essayer diverses choses, je n'arrive pas au bon résultat...
Merci d'avance !

Message cité 1 fois
Message édité par Yainima le 17-04-2014 à 09:07:04
Reply

Marsh Posté le 17-04-2014 à 08:42:45   

Reply

Marsh Posté le 17-04-2014 à 12:32:41    

Yainima a écrit :

Bonjour !
 
Je poste aujourd'hui car cela fais bientôt un mois que je suis purement et simplement bloqué sur un programme, à l'apparence pourtant facile.
Mon programme est le suivant :
 

Code :
  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;
  4. class NewAnimV3 extends JComponent {
  5. public static void main(String[] args) {
  6. //System.setProperty("apple.awt.brushMetalLook", "true" );
  7. JFrame f = new JFrame("" );
  8. NewAnimV3 anim = new NewAnimV3();
  9. //anim.init();
  10. anim.start();
  11. f.getContentPane().add(anim);
  12. f.pack();
  13. f.setVisible(true);
  14. }
  15. Image image;
  16. public void start() {
  17. image=Toolkit.getDefaultToolkit().getImage("C:/Coin_03_june.gif" );
  18. setSize(180,180);
  19. setPreferredSize(new Dimension(180,180));
  20. }
  21. protected void paintComponent(Graphics g) {
  22.     // efface le contenu précédent :
  23.     g.fillRect(0, 0, this.getWidth(), this.getHeight());
  24.    int i;
  25.     // dessine le gif :
  26.    for (i=1; i<=1; i++) {
  27.    g.drawImage(image,0,0,Color.white,this);
  28.    if (i>1) {
  29.     g.drawImage(image,0,0,Color.white,null);
  30.    }
  31. }
  32.     }
  33. }


 
Il anime mon image gif, et je suis déjà satisfaite avec sa. Cependant, je désire l'animer une fois car il sera lancé par un autre programme (un Pile ou Face). C'est pourquoi j'ai besoin que mon gif s'anime seulement une fois.
 
Pourrais-je avoir de l'aide ? J'ai beau me triturer les méninges et essayer diverses choses, je n'arrive pas au bon résultat...  
Merci d'avance !


 
 
Bonjour,
 
L'idée serait de ne pas utiliser un gif :) mais d'afficher plutôt une succession d'images : How to get a normally-repeating gif to only display once ou How to make a gif run once and stop in Java?.
 
Par exemple extraire les images du gif avec un outil en ligne : http://gif-explode.com/ et afficher les images avec une tempo entre chaque affichage :

Code :
  1. import java.awt.Dimension;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.awt.image.BufferedImage;
  5. import java.io.File;
  6. import java.io.IOException;
  7. import javax.imageio.ImageIO;
  8. import javax.swing.ImageIcon;
  9. import javax.swing.JButton;
  10. import javax.swing.JFrame;
  11. import javax.swing.JLabel;
  12. import javax.swing.JPanel;
  13. import javax.swing.SwingUtilities;
  14. public class Main2 {
  15. public static void initAndShowGui() {
  16.  final JFrame f = new JFrame("Gif" );
  17.  final JLabel label = new JLabel();
  18.  JButton button = new JButton("Show gif once" );
  19.  try {
  20.   final BufferedImage[] frames = new BufferedImage[]{
  21.     ImageIO.read(new File("chemin vers le dossier/index.png" )),
  22.     ImageIO.read(new File("chemin vers le dossier/index1.png" )),
  23.     ImageIO.read(new File("chemin vers le dossier/index2.png" ))
  24.     };
  25.   button.addActionListener(new ActionListener() {
  26.    @Override
  27.    public void actionPerformed(ActionEvent arg0) {
  28.     Thread th = new Thread(new Runnable() {
  29.      @Override
  30.      public void run() {
  31.       for(final BufferedImage buff : frames) {
  32.        SwingUtilities.invokeLater(new Runnable() {
  33.         @Override
  34.         public void run() {
  35.          label.setIcon(new ImageIcon(buff));
  36.         }
  37.        });
  38.        try {
  39.         Thread.sleep(1000);
  40.        } catch (InterruptedException e) {
  41.         e.printStackTrace();
  42.        }
  43.       }
  44.      }
  45.     });
  46.     th.start();
  47.    }
  48.   });
  49.  } catch (IOException e) {
  50.   e.printStackTrace();
  51.  }
  52.  JPanel panel1 = new JPanel();
  53.  panel1.add(label);
  54.  JPanel panel2 = new JPanel();
  55.  panel2.add(button);
  56.  f.add("Center", panel1);
  57.  f.add("South", panel2);
  58.  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  59.  f.setMinimumSize(new Dimension(640, 480));
  60.  f.setLocationRelativeTo(null);
  61.  f.setVisible(true);
  62. }
  63. public static void main(String[] args) {
  64.  SwingUtilities.invokeLater(new Runnable() {
  65.   @Override
  66.   public void run() {
  67.    initAndShowGui();
  68.   }
  69.  });
  70. }
  71. }


 
 
Ou alors :  

Citation :

Actually there is: ImageReader.read(int) will read a single frame of an animated GIF. But it's probably easier to just keep each frame as a separate file. –  VGR


Message édité par honrisse le 17-04-2014 à 12:39:31
Reply

Marsh Posté le 25-04-2014 à 00:42:50    

salut, je souhterais faire la même chose, avoir que, la possibilité de lire une seule fois la video, ou que le giff ne tourne pas en boucle.
sur une page internet. pouvez-vous m'aider, je suis débutant. merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed