2010-10-12 11 views
7

Ich versuche, horizontale und vertikale Linien auf einem gepufferten Bild zu zeichnen. Es sollte am Ende wie ein Gitter aus Zellen aussehen. Aber wenn ich den Code ausführen, sehe ich nur zwei Zeilen: die linke und die oberste Zeile (dh eine Zeile von 0,0 bis 0, Höhe des Bildes & 0,0 bis Breite des Bildes, 0) Hier ist das Code-Snippet DieseMehrere Zeilen in einem BufferedImage zeichnen

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

ist alles in einer Klasse namens RobotMaze die JPanel erweitert:

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); 
    } 

Und die überschriebene Methode paint. Jede Hilfe wird geschätzt.

Antwort

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 Dammit I! sollte die Größe jeder Zellenvariablen anstelle der gesamten Dimensionen verwenden ... Sorry für die lahme Frage Jungs und Danke für das Aufzeigen. – Adith

0

Wie erwarten Sie, dass das Ergebnis (imgDim.width+2)*i innerhalb der Bildgrenzen liegt, wenn i> 0 ist?

+0

yep Ich weiß, dass jetzt ... :( – Adith

1

Drucken Sie Ihre Koordinaten und Sie werden sehen, dass Sie Punkte außerhalb der Breite und Höhe des Bildes grafisch darstellen:

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);