Java 2D图形:无法叠加图像

时间:2010-01-17 21:34:38

标签: java graphics java-2d

我试图抓住java 2d图形

我基本上得到了一个带有backgrounfd图像的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();
     }

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

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

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

任何帮助都是b gr8

4 个答案:

答案 0 :(得分: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是一个包含从您的XML中提取的xy变量的结构。

如果你在背景后调用g.drawImage(...):它将在背景后绘制,从而叠加。如果您需要,请务必加载png-24图像,以启用半透明区域。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

哦亲爱的

我错误地将我的资源的文件名格式化了

我是什么驴子

我认为所有好建议虽然是人