java 在 BufferedImage 中绘制多条线

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3914265/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 03:57:19  来源:igfitidea点击:

Drawing multiple lines in a BufferedImage

javaswingdrawinglinesbufferedimage

提问by Adith

I am trying to draw horizontal and vertical lines on a bufferedimage. It should end up looking like a grid of cells. But when I run the code, I see only two lines: the leftmost line and the topmost line (ie. a line from 0,0 to 0,height of image & 0,0 to width of image,0) Heres the code snippet:

我正在尝试在缓冲图像上绘制水平线和垂直线。它最终应该看起来像一个单元格网格。但是当我运行代码时,我只看到两行:最左边的一行和最上面的一行(即从 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);
  }

And the overriden paint method:

和重写的paint方法:

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

This is all in a class called RobotMaze that extends JPanel. Any help is appreciated.

这一切都在一个名为 RobotMaze 的类中,它扩展了 JPanel。任何帮助表示赞赏。

回答by Andrew Thompson

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

回答by dogbane

Print out your coordinates and you will see that you are plotting points outside the width and height of the 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);

回答by jarnbjo

How do you expect the result of (imgDim.width+2)*ito be within the image boundaries if i > 0?

(imgDim.width+2)*i如果 i > 0,您如何期望 的结果在图像边界内?