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