2016-10-04 2 views
0

J'ai mis à l'échelle des images facilement avec le .getScaledInstance lors de leur importation comme ceci:.getScaledInstance travaillant avec des GIFs animés

player_sprite = a_1.getImage().getScaledInstance(150, 150, 100); 

Mais on ne peut pas être dit au sujet de mise à l'échelle des GIFs animés que quand je fais la même méthode de mise à l'échelle d'un GIF il provoque des problèmes lors de l'affichage. En utilisant g.drawImage il dessine seulement la première image puis disparaît.

Voici le code complet pour importer le GIF que j'utilise et ci-dessous sera un exemple de la façon dont je visualise le GIF animé sur le JFrame:

son importation:

ImageIcon a_1 = new ImageIcon(FrontHand.class.getResource("/Sprites/character_move_down.gif")); 
    move_player_down = a_1.getImage().getScaledInstance(100, 100, 100); 

Afficher le:

g.drawImage(move_player_down, 100, 100, this); 

y at-il une autre méthode simple que je pourrais utiliser pour augmenter la taille du GIF animé ou est-il une solution simple à ce problème.

+0

Les GIF ne devraient pas évoluer différemment des autres formats de fichiers, à moins que vous ne parliez spécifiquement de GIF * animés *. Si c'est le cas, vous pourriez vouloir mettre cette information critique dans votre question. –

+0

1. Passer '100' comme dernier paramètre de' getScaledInstance' n'a pas de sens. 2. Avez-vous * vraiment * besoin de l'instance * mise à l'échelle *? Ne pouvez-vous pas le dessiner plus gros (avec l'appel 'drawImage' approprié, ou peut-être un' Graphics2D 'transformé?) 3. Avez-vous vraiment besoin de l'agrandir * dans votre programme *? Vous ne pouvez pas utiliser un outil externe pour créer l'image avec la taille désirée? Obtenir une instance réduite d'un gif animé semble être étonnamment difficile.Ce http://stackoverflow.com/q/9392227/ est fondamentalement un doublon, mais la réponse semble très délicate ... EDIT @ HovercraftFullOfEels * "dessine la première image" * – Marco13

+0

ne savait pas qu'il y avait une différence mettra à jour :) – Taka

Répondre

1

J'ai trouvé une solution en allant dans Scalr, j'ai fini pas avec Scalr mais trouvé un commentaire sur un fil de Scalr qui en utilisant .getscaledinstance est en train de changer la taille et l'impression puis avec paintIcon et non drawImage comme ceci:

Changement de la taille:

ImageIcon a_1 = new ImageIcon(FrontHand.class.getResource("/Sprites/character_move_down.gif")); 
a_1.setImage(a_1.getImage().getScaledInstance(150, 150, Image.SCALE_DEFAULT)); 
move_player_down = a_1; 

Peinture l'icône:

move_player_down.paintIcon(this, g, 100, 100); 

Il fonctionne comme un charme et ne me demande pas de changer tout mon p le code révié pour contourner le problème :)