Рисование нескольких линий в BufferedImage - PullRequest
7 голосов
/ 12 октября 2010

Я пытаюсь нарисовать горизонтальные и вертикальные линии на буферизованном изображении. Это должно в конечном итоге выглядеть как сетка клеток. Но когда я запускаю код, я вижу только две строки: крайнюю левую строку и самую верхнюю строку (т.е. строку от 0,0 до 0, высоту изображения и 0,0 до ширины изображения, 0) :

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

И переопределенный метод краски:

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

Это все в классе под названием RobotMaze, который расширяет JPanel. Любая помощь приветствуется.

Ответы [ 3 ]

8 голосов
/ 12 октября 2010
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);
    }
}
1 голос
/ 12 октября 2010

Распечатайте ваши координаты, и вы увидите, что вы наносите точки за пределами ширины и высоты изображения:

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);
0 голосов
/ 12 октября 2010

Как вы ожидаете, что результат (imgDim.width+2)*i будет в границах изображения, если i> 0?

...