Coloration d'une ligne de pixels : le canvas ne semble pas être màj

a marqué ce sujet comme résolu.

Salut tout le monde,

J’essaie de faire une anim° en java et il se trouve que je rencontre quelques difficultés…

Je dispose d’une liste de couleurs (instances de Color) à laquelle j’accède depuis ma classe abstraite Colors et actuellement j’essaie de remplir une ligne de pixels (de coordonnée y=6) avec. Voici ci-dessous le code correspondant.

    public static void main(String args[]) {
        Gui gui = new Gui();
        gui.setUp("DOOM-like fire", 400, 400);
        gui.setVisible(true);

        Colors colors = new FireColors(new ArrayList<>());

        gui.colorize(colors.getColorAtIndex(5), 6);
    }

La méthode colorize fonctionne comme suit :

    void colorize(Color color, int y_parameter) {
        for(int y = (y_parameter == -1 ? 0 : y_parameter); y <= (y_parameter == -1 ? this.getHeight() - 1 : y_parameter); y++) {
            for(int x = 0; x < this.getWidth(); x++) {
                buffered_image.setRGB(x, y, color.getRGB());
                System.out.println(y + " " + x + " " + color.getRGB());
            }
        }
        repaint();
    }

    public void paint(Graphics graphics) {
        super.paint(graphics);
        graphics.drawImage(buffered_image, 0, 0, null);
    }

Lors de l’exécution, j’obtiens bien les bonnes coordonnées x et y, ainsi que -8970489 (qui correspond au .getRGB(). Donc de ce côté c’est tout bon.

Vous voyez que j’utilise la variable buffered_image pour colorier les pixels de mon canvas. Cette variable n’est affectée qu’une seule fois lors de l’exécution du programme : au moment où setUp est appelée, jamais autrement. Donc c’est toujours la bonne instance de BufferedImage qui est utilisée.

Pourtant, jamais je ne vois les pixels se colorier dans la ligne de coordonnée y=6. Pourquoi ?

Code complet

Vous pouvez tester le programme :) .

Launcher.java

import java.util.ArrayList;

public class Launcher {

    public static void main(String args[]) {
        Gui gui = new Gui();
        gui.setUp("DOOM-like fire", 400, 400);
        gui.setVisible(true);

        Colors colors = new FireColors(new ArrayList<>());

        gui.colorize(colors.getColorAtIndex(5), 6);
    }

}

Gui.java

import java.awt.*;
import javax.swing.*;
import java.awt.image.BufferedImage;

class Gui extends JFrame {

    private BufferedImage buffered_image;

    void setUp(String title, int width, int height) {
        this.setTitle(title);
        this.setLayout(null);
        this.setSize(width, height);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.buffered_image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    }

    void colorize(Color color, int y_parameter) {
        for(int y = (y_parameter == -1 ? 0 : y_parameter); y <= (y_parameter == -1 ? this.getHeight() - 1 : y_parameter); y++) {
            for(int x = 0; x < this.getWidth(); x++) {
                buffered_image.setRGB(x, y, color.getRGB());
                System.out.println(y + " " + x + " " + color.getRGB());
            }
        }
        repaint();
    }

    public void paint(Graphics graphics) {
        super.paint(graphics);
        graphics.drawImage(buffered_image, 0, 0, null);
    }

}

Colors.java

import java.awt.Color;
import java.util.List;

abstract class Colors {
    List<Color> colors;

    Color getColorAtIndex(int index) {
        return colors.get(index);
    }
}

FireColors.java

import java.awt.Color;
import java.util.List;

class FireColors extends Colors {

    FireColors(List<Color> colors) {
        this.colors = colors;
        this.colors.add(new Color(7, 7, 7));

        this.colors.add(new Color(47, 15, 7));
        this.colors.add(new Color(71, 15, 7));
        this.colors.add(new Color(87, 23, 7));
        this.colors.add(new Color(103, 31, 7));
        this.colors.add(new Color(119, 31, 7));
        this.colors.add(new Color(143, 39, 7));
        this.colors.add(new Color(159, 47, 7));
        this.colors.add(new Color(175, 63, 7));
        this.colors.add(new Color(191, 71, 7));

        this.colors.add(new Color(199, 71, 7));
        this.colors.add(new Color(223, 79, 7));
        this.colors.add(new Color(223, 87, 7));
        this.colors.add(new Color(223, 87, 7));
        this.colors.add(new Color(215, 95, 7));

        this.colors.add(new Color(215, 103, 15));
        this.colors.add(new Color(207, 111, 15));
        this.colors.add(new Color(207, 119, 15));
        this.colors.add(new Color(207, 127, 15));

        this.colors.add(new Color(207, 135, 23));
        this.colors.add(new Color(199, 135, 23));
        this.colors.add(new Color(199, 143, 23));

        this.colors.add(new Color(199, 151, 31));
        this.colors.add(new Color(191, 159, 31));
        this.colors.add(new Color(191, 159, 31));

        this.colors.add(new Color(191, 167, 39));
        this.colors.add(new Color(191, 167, 39));

        this.colors.add(new Color(191, 175, 47));
        this.colors.add(new Color(183, 175, 47));
        this.colors.add(new Color(183, 183, 47));

        this.colors.add(new Color(183, 183, 55));

        this.colors.add(new Color(207, 207, 111));

        this.colors.add(new Color(223, 223, 159));

        this.colors.add(new Color(239, 239, 199));

        this.colors.add(new Color(255, 255, 255));
    }

}
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte