Java 2D Graphics: невозможно накладывать изображения

Я пытаюсь разобраться с 2D-графикой Java.

В основном у меня есть 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


person user252693    schedule 17.01.2010    source источник
comment
ура за опечатку андриева   -  person user252693    schedule 18.01.2010
comment
Непонятно, что вы пытаетесь сделать. Цикл, который вы описываете, кажется, отсутствует. Видите ли вы результат первого вызова drawImage на экране?   -  person Samuel Sjöberg    schedule 18.01.2010


Ответы (4)


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, чтобы включить области прозрачности, если вы этого хотите.

person Pindatjuh    schedule 17.01.2010
comment
Синтаксический анализ XmL не проблема. Я определенно получил все свои имена файлов и могу их перебирать. Мое первое изображение нарисовано на jPanel в качестве фона без проблем. Затем я хочу накладывать меньшие изображения в определенных точках (которые я знаю и хорошо знаю из моего xml) перед фоном. - person user252693; 18.01.2010
comment
Да, это то, что я понял из вашего вопроса. Все еще; никто не сможет вам помочь, если вы не предоставите достаточно информации. Например; какой парсинг XML вы используете, как хранятся координаты: как объект? Два других парня, по сути, сказали то же самое: используйте ‹code›g.drawImage(...);‹/code›, но... вы программист! Так что вам нужно что-то запрограммировать, чтобы это работало, правильно. - person Pindatjuh; 18.01.2010

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

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

person Samuel Sjöberg    schedule 17.01.2010

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

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

Это немного проще, чем код, который у вас есть выше.

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

person Chad Okere    schedule 17.01.2010

О, Боже

Id неправильно отформатировал имена файлов моих ресурсов

какой я осел

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

person user252693    schedule 17.01.2010