2012-12-17 4 views
0

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.

Répondre

0

Je ne vois pas où vous définissez la couleur pour le remplissage du rectangle.

Essayez ceci:

Graphics g = bs.getDrawGraphics(); 
// g.setColor(Color.WHITE); 
// g.fillRect(0, 0, getWidth(), getHeight()); 
g.drawImage(img, 0, 0, getWidth(), getHeight(), null); 
g.dispose(); 
bs.show(); 
+0

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

+0

J'ai changé les paramètres drawImage. Cela devrait être la toile entière, peu importe si elle est redimensionnée ou non. –

Questions connexes