IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

[image][transparence]problème de transparence sur un gif


Sujet :

2D Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut [image][transparence]problème de transparence sur un gif
    J'ai un programme qui crée un tableau d'images à partir de fichiers GIF.

    Pour cela je crée un BufferedImage que je transforme (grace à une méthode emprunté à un certain Narkotic :p) en une image qui est transparente pour chaque pixel ayant une couleur donnée ( en l'occurence : 0, 255, 0).

    Ce tableau est affiché dans un JFrame lorsqu'une touche est enfoncée.
    J'utilise le double buffering pour effectuer cette opération.

    Seulement j'ai un problème :
    La première image est correctement traitée et correctement affichée. Mais la seconde image au lieu d'être transparente aux pixels indiqués comporte des pixels noirs.
    Je ne comprends pas l'origine de mon erreur, les pixels étant verts à l'origines et noirs à l'arrivée signifie que les pixels ont été traités mais apparement pas correctement.
    A priori mes images ont été crées de la même façon donc je ne pense pas que le fichier GIF comporte des erreurs.

    Voici mon code (épuré pour porter uniquement sur mon problème) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.image.*;
    import javax.imageio.*;
    import java.io.*;
     
    public class Test extends JFrame implements KeyListener {
    	private Image[][] images;
    	private BufferStrategy strategy; 
    	private Graphics backBuffer; 
     
    	public Test() {
    		setSize(600, 600);
    		addKeyListener(this);
    		setVisible(true);
     
    		createBufferStrategy(2);
    		strategy = getBufferStrategy(); 
    		backBuffer = strategy.getDrawGraphics(); ;
     
    		//initialisation du tableau d'images
    		images = new Image[1][2];
    		try {
    			images[0][0] = ImageTransparente(ImageIO.read(new File("rpg1-2.GIF")), 0, 255, 0);
    			images[0][1] = ImageTransparente(ImageIO.read(new File("rpg1-1.GIF")), 0, 255, 0);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		show();
    	}
     
    	//rendre la couleur transparente
    	public Image ImageTransparente(BufferedImage bufferedImage, int red, int green, int blue) {
    		int filtre = new Color(red, green, blue).getRGB();
    		int remplissage = new Color(255, 255, 255, 0).getRGB();
    			for (int y = 0; y < bufferedImage.getHeight(); y++) {
    				for (int x = 0; x < bufferedImage.getWidth(); x++) {
    					if (bufferedImage.getRGB(x,y) == filtre) {
    						bufferedImage.setRGB(x, y, remplissage);
    					}
    				}
    			}
    		return createImage(bufferedImage.getSource());
    	}
     
    	//afficher le tableau d'images
    	private void afficher() {
    		for (int i = 0; i<images.length; i++) {
    			for (int j = 0; j<images[0].length; j++) {
    				backBuffer.drawImage(images[i][j], 50 * j + 50, 50 * i + 50, this);
    			}
    		}
    		repaint();
    	}
     
    	public void paint(Graphics comp) {
    		if (strategy!=null) {
    			strategy.show();
    		}
    	}
     
    	//lorsqu'on appuie sur une touche on lance l'affichage
    	public void keyPressed(KeyEvent event) {
    		afficher();
    	}
     
    	public void keyReleased(KeyEvent event) {
    	}
     
    	public void keyTyped(KeyEvent event) {
    	}
     
    	public static void main(String[] args) {
    		Test test = new Test();
    	}
    }
    Si vous avez la moindre piste, idée, suggestion ou même solution je suis preneur ça fait plusieurs jours que je suis là dessus. lol

  2. #2
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Quelqu'un qui connait un peu les traitements graphiques en Java n'aurait pas une pettite idée de la raison de ce mauvais traitement?

    C'est peut être dû à un mauvaise utilisation du double buffering?

  3. #3
    Membre actif
    Avatar de narkotik
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 229
    Points
    229
    Par défaut
    ImageIO est une méthode synchrone de chargement des images cependant, en contre-partie, elle ne prend pas en compte les couches Alpha d'une image, ton probleme vient p-e de la, ce n'est pas non plus une certitude mais ca s'pourrait.

    bref la solution: vas dans la FAQ ou tu trouveras la méthode d'acquisition d'image avec Toolkit.getDefaultToolkit.getImage()

    sinon si ca marche pas, files tes 2 images que je puisse voir de mon coté
    (+mitch): nan mais nanar j'préfère mourir contre un platane apres un accident de voiture plutot que d'une rupture d'anévrisme devant mon ecran d'pc

  4. #4
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Ah ok, je vais essayer ça.

    Cepandent j'avais un problème avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Toolkit.getDefaultToolkit.getImage()
    Car pour faire la transparence j'utilisais ta fonction : http://www.developpez.net/forums/viewtopic.php?t=211710

    Mais j'avais un problème :
    et
    me retournaient toujours "-1".

    Merci pour ta réponse, je vais essayer de trouver.

  5. #5
    Membre actif
    Avatar de narkotik
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 229
    Points
    229
    Par défaut
    Si ca retourne -1 c'est que ton image n'est pas chargée !! tout simplement
    la solution consiste a la charger au préalable avec une fonction MediaTracker.
    (+mitch): nan mais nanar j'préfère mourir contre un platane apres un accident de voiture plutot que d'une rupture d'anévrisme devant mon ecran d'pc

  6. #6
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Oki, j'ai de la doc sur mediatracker je crois, je vais tester ça.

    Merci bien.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Bien joué à présent en utilisant le toolkit pour charger les images et en se servant de mediatracker pour qu'elles soient finies de charger avant de les traiter ça marche nickel.

    Merci beaucoup.

  8. #8
    Membre actif
    Avatar de narkotik
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Points : 229
    Points
    229
    Par défaut
    de rien p'tit si t'as d'autres problemes sur les graphiques, hésites pas
    (+mitch): nan mais nanar j'préfère mourir contre un platane apres un accident de voiture plutot que d'une rupture d'anévrisme devant mon ecran d'pc

  9. #9
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 58
    Points : 49
    Points
    49
    Par défaut
    Hé hé ça ne sera pas tombé dans les yeux d'un aveugle.

    D'ailleurs le jour où tu mets un tutorial en ligne n'hésites pas à m'envoyer un mp.

    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD15] Problème de transparence sur image PGN à l'impression
    Par lololebricoleur dans le forum WinDev
    Réponses: 2
    Dernier message: 12/02/2011, 18h31
  2. Problème de transparence GIF et PNG avec Export et SaveAs
    Par nl5nn dans le forum VBA PowerPoint
    Réponses: 2
    Dernier message: 04/03/2008, 21h31
  3. problème de fond sur un gif
    Par wadlle dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/07/2007, 00h47
  4. [C#] Problème de transparence sur un TerminalServer
    Par sur_uix dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/11/2006, 18h43
  5. [image] Problème de transparence
    Par Cedrun dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 19/09/2006, 00h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo