2010-10-12 19 views
7

Bir arabellek görüntüsünde yatay ve dikey çizgiler çizmeye çalışıyorum. Hücre ızgarasına benzemeli. Ancak kodu çalıştırdığımda sadece iki satır görüyorum: en soldaki satır ve en üstteki satır (yani 0,0 - 0 arası bir çizgi, görüntünün yüksekliği & 0,0 - görüntünün genişliği, 0) Kod snippet'i :Bir BufferedImage öğesinde birden fazla çizgi çizmek

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

Ve overriden boya yöntemi:

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

Bu, tüm Jpanel uzanır RobotMaze adında bir sınıftadır. Herhangi bir yardım takdir edilir.

cevap

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 Kahretsin ben! tüm boyutlar yerine tüm hücre değişkenlerinin boyutunu kullanması gerekiyordu ... Topal soruları için özür dilerim ve bunu işaret ettiğin için teşekkürler. – Adith

0

0>>>> Eğer görüntü sınırlarının içinde (imgDim.width+2)*i sonucunun nasıl olmasını beklersiniz?

+0

yep şimdi ... :( – Adith

1

Baskı dışarı Koordinatlarınızı ve size resmin genişlik ve yükseklik dışında noktaları çizmek olduğunu göreceksiniz: i gerçekleştirmek

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); 
İlgili konular