Bonjour,

j'ai un bug graphique quand j'affiche une image noir et blanc avec par-dessus un dégradé de couleurs.

Voici une capture d'écran avec les couleurs normales :
Nom : couleusNormales.png
Affichages : 340
Taille : 310,5 Ko

Et en voici une avec des couleurs buggées
Nom : couleursBizarres.png
Affichages : 357
Taille : 406,8 Ko

Voici le code de la méthode qui ajoute le dégradé de couleurs à une image donnée :
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
 
// g : destination de dessin, i : image source sur laquelle le dégradé est appliqué, c : couleurs du dégradé, x et y : coordonnées de dessin
  public static void drawAdditionnalGradient(Graphics2D g, BufferedImage i, Color[] c, int x, int y) {
    int w = i.getWidth();
    int h = i.getHeight();
    BufferedImage b0 = DirectBufferIO.createBuffer(w, h, Transparency.TRANSLUCENT, "PaintToolkit.drawAdditionnalGradient,0"); // création des bufferq
    BufferedImage b1 = DirectBufferIO.createBuffer(w, h, Transparency.TRANSLUCENT, "PaintToolkit.drawAdditionnalGradient,1");
    Graphics2D g0 = b0.createGraphics();
    Graphics2D g1 = b1.createGraphics();
 
    int alpha = c[0].getAlpha(); //composante transparence du dégradé, donné par la composante alpha de la première couleur du dégradé
    if (alpha < 255)
      g0.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)alpha / 255f)); // dessiner en transparent sur g0
    g0.drawImage(i, 0, 0, null); // on dessine l'image i en transparent sur g0
    fillOpaqueGradient(g1, c, new Rectangle(0, 0, w, h)); // créer un dégradé de couleurs opaque dans g1
    b1.getAlphaRaster().setRect(b0.getAlphaRaster()); // la transparence de b1 devient celle de b0, on obtient un dégradé découpé et transparent
    g.drawImage(b1, x, y, null); // dessin du déradé dans la destination 
 
    g0 = null; // vidange mémoire
    g1 = null;
    DirectBufferIO.flushBuffer(b0);
    DirectBufferIO.flushBuffer(b1);
  }
Je me demande d'où vient ce bug et comment le corriger.
Le bug apparait sur certaines configurations et pas sur d'autres dans AnAcondA, un logiciel que je développe.
Si vous voulez l'essayer, vous pouvez le télécharger sur : www.anadoncamille.com
Si vous voulez voir l'animation qui a créé les deux captures d'écran, démarrez AnAcondA et allez dans Laboratoire -> Recherche -> Causalité -> Multiver