0

我试图掌握 java 2d 图形

我基本上得到了一个带有背景图像的JPanel,如下所示:

public MapFrame(Plotting pl){
    this.pl =pl;
    this.setPreferredSize(new Dimension(984,884));
    this.setBorder(BorderFactory.createEtchedBorder());
    try {
          getFileImage("stars.jpg");
        }
        catch (Exception ex) {

        }

    this.addMouseMotionListener(this);
    this.addMouseListener(this);
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);    
    g.drawImage(bg, 0, 0, null);
    Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(new Color(0x756b48));
            g2d.drawLine(0,0,0,100);
}

private void getFileImage(String filePath) throws InterruptedException, IOException {
        FileInputStream in = new FileInputStream(filePath);
        byte [] b=new byte[in.available()];
        in.read(b);
        in.close();
        bg=Toolkit.getDefaultToolkit().createImage(b);
        MediaTracker mt=new MediaTracker(this);
        mt.addImage(bg,0);
        mt.waitForAll();
     }

在绘画组件中,我想在一个循环中覆盖从某些 xml 获得的各种 xy 点的小图像 12x12 像素。

似乎无法将图像覆盖在我的第一个图像上

我在这里有点迷路并且生锈了

任何帮助都会 b gr8

4

4 回答 4

0
public void paintComponent(Graphics g) {
    g.drawImage(bg, 0, 0, null);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setColor(new Color(0x756b48));
    g2d.drawLine(0,0,0,100);

    for(SomeXMLObject o : yourXMLSource) {
        g.drawImage(yourImage, o.x, o.y, null);
    }
}

如果您已经这样做了,请更清楚地说明您的 XML 是如何被解析的。然后,您还需要加载“12x12”图像。SomeXMLObject是一个结构包含xy变量的结构,从您的 XML 中提取。

如果在背景之后调用 g.drawImage(...):它将在背景之后绘制,从而覆盖。如果需要,请确保加载 png-24 图像以启用半透明区域。

于 2010-01-17T21:45:16.457 回答
0

您可能想使用ImageIO 库来加载您的图像。如果你有一个图像文件名,你需要做的就是加载它

BufferedImage bimg = ImageIO.load(new File(filename));

这比您上面的代码要容易一些。

之后,就像其他人说的那样,您可以使用g.drawImage(bimg,x,y,this);来实际绘制图像。

于 2010-01-17T22:12:14.610 回答
0

如果要在不同的位置绘制图像,很简单,只需Graphics.drawImage(Image, int, int, ImageObserver)多次调用不同的坐标(如上一个答案所示)。

至于加载图像,我建议使用其中一种ImageIO.read方法,而不是自己做。

于 2010-01-17T21:52:41.833 回答
0

哦亲爱的

我的资源文件名格式错误

我是什么驴

尽管伙计们,我认为所有的好建议

于 2010-01-17T22:36:45.170 回答