2010-10-12 31 views
7

J'essaie de dessiner des lignes horizontales et verticales sur une image tamponnée. Cela devrait ressembler à une grille de cellules. Mais quand je cours le code, je vois seulement deux lignes: la ligne la plus à gauche et la ligne la plus haute (ie une ligne de 0,0 à 0, hauteur de l'image & 0,0 à la largeur de l'image, 0) Heres l'extrait de code :Dessin de plusieurs lignes dans une image tamponnée

BufferedImage mazeImage = new BufferedImage(imgDim.width, imgDim.height, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2d = mazeImage.createGraphics(); 
    g2d.setBackground(Color.WHITE); 
    g2d.fillRect(0, 0, imgDim.width, imgDim.height); 
    g2d.setColor(Color.BLACK); 
    BasicStroke bs = new BasicStroke(2); 
    g2d.setStroke(bs); 
    // draw the black vertical and horizontal lines 
    for(int i=0;i<21;i++){ 
    g2d.drawLine((imgDim.width+2)*i, 0, (imgDim.width+2)*i, imgDim.height-1); 
    g2d.drawLine(0, (imgDim.height+2)*i, imgDim.width-1, (imgDim.height+2)*i); 
    } 

Et la méthode de peinture surchargée:

public void paint(Graphics g) { 
    g.drawImage(mazeImage, 0, 0, this); 
} 

tout cela est dans une classe appelée RobotMaze qui s'étend JPanel. Toute aide est appréciée.

Répondre

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

class GridLines { 

    public static void main(String[] args) { 

     Dimension imgDim = new Dimension(200,200); 
     BufferedImage mazeImage = new BufferedImage(imgDim.width, imgDim.height, BufferedImage.TYPE_INT_RGB); 


     Graphics2D g2d = mazeImage.createGraphics(); 
     g2d.setBackground(Color.WHITE); 
     g2d.fillRect(0, 0, imgDim.width, imgDim.height); 
     g2d.setColor(Color.BLACK); 
     BasicStroke bs = new BasicStroke(2); 
     g2d.setStroke(bs); 
     // draw the black vertical and horizontal lines 
     for(int i=0;i<21;i++){ 
      // unless divided by some factor, these lines were being 
      // drawn outside the bound of the image.. 
      g2d.drawLine((imgDim.width+2)/20*i, 0, (imgDim.width+2)/20*i,imgDim.height-1); 
      g2d.drawLine(0, (imgDim.height+2)/20*i, imgDim.width-1, (imgDim.height+2)/20*i); 
     } 

     ImageIcon ii = new ImageIcon(mazeImage); 
     JOptionPane.showMessageDialog(null, ii); 
    } 
} 
+0

Ah Zut je! était censé utiliser la taille de chaque variable de cellule au lieu de toutes les dimensions ... Désolé pour la question boiteux les gars et merci de le signaler. – Adith

0

Comment voulez-vous que le résultat de (imgDim.width+2)*i soit dans les limites de l'image si i> 0?

+0

eh oui je me rends compte que maintenant ... :( – Adith

1

Imprimez vos coordonnées et vous verrez que vous complotez des points en dehors de la largeur et la hauteur de l'image:

System.out.printf("Vertical: (%d,%d)->(%d,%d)\n",(imgDim.width+2)*i, 0, (imgDim.width+2)*i, imgDim.height-1); 
System.out.printf("Horizontal: (%d,%d)->(%d,%d)\n",0, (imgDim.height+2)*i, imgDim.width-1, (imgDim.height+2)*i);