J'essaye de dessiner des pixels sur un canevas en utilisant une image tamponnée. Dans mon constructeur de toile Je suis Initialisation l'image et matrice de pixels comme ceci:Dessiner des pixels sur le canevas avec BufferedImage ne pas remplir le canevas entier
public MyCanvas() {
Dimension size = new Dimension(WIDTH, HEIGHT);
setSize(size);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
}
Je dessine tous les render en faisant:
private void render() {
BufferStrategy bs = getBufferStrategy();
if (bs == null) {
createBufferStrategy(3);
return;
}
for (int i = 0; i < pixels.length; i++) {
pixels[i] = 0xFFFFFF;
}
Graphics g = bs.getDrawGraphics();
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
g.dispose();
bs.show();
}
je prévois que ma toile est remplie de pixels blancs, mais Je reçois des bordures noires sur la partie droite et la partie inférieure de la zone blanche, c'est-à-dire que ça ne semble pas remplir toute ma toile, ou qu'il y a un décalage négatif. J'ai vérifié que la longueur du tableau de pixels est WIDTH * HEIGHT. Je place la toile dans un JPanel avec BorderLayout.CENTER, dans un JFrame.
EDIT:
Changer
g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
à
g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
fait faire ce que je pense. Cependant, je ne comprends pas pourquoi je dois aller chercher la taille de la toile quand j'ai défini la taille moi-même (à WIDTH, HEIGHT), et cela ne semble pas être la même que la taille que je lui ai donnée.
Le but est de ne pas remplir la toile entière avec des pixels blancs vraiment, mais je crains que cela ne tire pas sur la toile entière. – tobier
J'ai changé les paramètres drawImage. Cela devrait être la toile entière, peu importe si elle est redimensionnée ou non. –