Java 2D-графика: не может накладывать изображения - PullRequest
0 голосов
/ 18 января 2010

Я пытаюсь справиться с графикой Java 2d

Я в основном получил JPanel с изображением backgrounfd, вот так:

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 пикселей в цикле в различных точках xy, которые получаются из некоторого xml.

Не похоже, чтобы изображение наложилось поверх моего первого

Я немного растерян и здесь ржавый

Любая помощь будет b gr8

Ответы [ 4 ]

0 голосов
/ 18 января 2010

О, дорогой

Идентификатор неправильно отформатировал имена моих ресурсов

что я за осел

Всем хороший совет, я думаю, что, ребята

0 голосов
/ 18 января 2010

Если вы хотите нарисовать изображение в разных местах, это так же просто, как несколько раз вызвать Graphics.drawImage(Image, int, int, ImageObserver) для разных координат (как показано в предыдущем ответе).

Что касается загрузки изображений, я 'рекомендую использовать один из методов <a href="http://java.sun.com/javase/6/docs/api/javax/imageio/ImageIO.html" rel="nofollow noreferrer">ImageIO.read вместо того, чтобы делать это самостоятельно.

0 голосов
/ 18 января 2010

Возможно, вы захотите использовать библиотеку ImageIO для загрузки вашего изображения. Если у вас есть имя файла изображения, все, что вам нужно сделать, чтобы загрузить его, это

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

Это немного проще, чем код выше.

После этого, как и другие люди говорили, вы можете использовать g.drawImage(bimg,x,y,this); для фактического рисования изображений.

0 голосов
/ 18 января 2010
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 - это структура, содержащая переменные x и y, извлеченные из вашего XML.

Если вы вызываете g.drawImage (...) после фона: он будет закрашен после фона и, следовательно, наложен. Обязательно загрузите изображение png-24, чтобы включить области полупрозрачности, если вы этого хотите.

...