Bonjour,

en désespoir de cause, je me tourne vers ce forum qui m'a maintes fois sauvé par le passé.

J'ai un problème pour gèrer la transparence d'une BufferedImage sur une autre. Je vais mettre un bout de code simplifié qui vaudra mieux qu'un long discours.

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
public static void combineImages(BufferedImage image1, BufferedImage2){
 
BufferedImage imageToReturn=new BufferedImage(image1.getWidth(), image1.getHeight(), BufferedImage.TYPE_INT_ARGB);
 
Graphics2D graphicsToReturn= (Graphics2D) imageToReturn.getGraphics();
 
 
graphicsToReturn.setComposite(AlphaComposite.Src);
// Copie l'image1 dans imageToReturn tout simplement en écrasant toutes les valeurs précedemment contenue dans imageToReturn (à cause de AlphaComposite.Src)
graphicsToReturn.drawImage(image1, 0, 0, null);
 
 
//Ici makeTransparent() est une méthode qui transforme tous les pixel de la couleur passée en paramètre dans l'image par la même couleur mais avec un canal alpha à 00.
 
//j'ai essayé de changer le graphicsToReturn.setComposite() à d'autres valeurs sans succès. La deuxieme image insérée "écrase" toujours celle insérée en premier.
graphicsToReturn.setComposite(AlphaComposite.SrcOver);
graphicsToReturn.drawImage(makeTransparent(image2, new Color(0xFFFFFFFF),0, 0, null);
 
 
}
Voilà, comme vous pouvez le voir je veux que image2 soit superposée à image1 mais avec les pixel blancs (0xFFFFFFFF) de image2 laissant apparaitre l'image1. Ma méthode makeTransparent() met normalement les pixel (0xFFFFFFFF) à la valeur (0x00FFFFFF)

Qu'ai je manqué ?

Merci d'avance aux répondants.