임의의 도시에서 트래픽 네트워크 시뮬레이션에 대한 Java 프로젝트가 있으므로이 프로젝트를 구현하는 방법을 알아 냈습니다. 그래서 각 교차점을 기본적으로 확장 된 JPanel 클래스 인 까르푸 (Cartre) ... 나는 차량을 끌고 길을 통과하는 방법에 매달릴 때까지 모든 것이 잘 작동합니다.다른 이미지 위에 이미지를 그리는 방법은 무엇입니까?
내 문제는 어떻게 다른 이미지 (도로) 위에 이미지 (차량 이미지)를 그리는 것입니까?
임의의 도시에서 트래픽 네트워크 시뮬레이션에 대한 Java 프로젝트가 있으므로이 프로젝트를 구현하는 방법을 알아 냈습니다. 그래서 각 교차점을 기본적으로 확장 된 JPanel 클래스 인 까르푸 (Cartre) ... 나는 차량을 끌고 길을 통과하는 방법에 매달릴 때까지 모든 것이 잘 작동합니다.다른 이미지 위에 이미지를 그리는 방법은 무엇입니까?
내 문제는 어떻게 다른 이미지 (도로) 위에 이미지 (차량 이미지)를 그리는 것입니까?
Swing의 경우, 백그라운드 이미지를 BufferedImage에 묘화합니다. 이 BufferedImage를, Graphic의 drawImage(...)
메서드를 사용해 JComponent (JPanel의) paintComponent 메소드에 표시해, 변경된 이미지를 같은 paintComponent 메소드로 묘화합니다. 먼저 super.paintComponent(...)
메서드를 호출하는 것을 잊지 마십시오.
이 질문은 여기 또는 다른 곳에서 많이 물어 보았습니다. 예상했던대로이 검색에는 약간의 검색을 통해 찾을 수있는 많은 예제가 있습니다.
편집이
당신은 질문 :
덕분에,이 내가
다시 (도로)을 firt 이미지를 그리는 방법, 당신은 사용하여 가능성이에 대한 BufferedImage를 만들 것 ImageIO.read(...)
. 그런 다음 g.drawImage(...)
을 사용하여 JPanel의 paintComponent(Graphics g)
메서드 재정의에서이를 그립니다. 예를 들어
...
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
@SuppressWarnings("serial")
public class IntersectionImagePanel extends JPanel {
private static final String INTERSECTION_LINK = "http://www.weinerlawoffice.com/" +
"accident-diagram.jpg";
private BufferedImage intersectionImage;
public IntersectionImagePanel() {
URL imageUrl;
try {
imageUrl = new URL(INTERSECTION_LINK);
intersectionImage = ImageIO.read(imageUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
System.exit(-1);
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (intersectionImage != null) {
g.drawImage(intersectionImage, 0, 0, this);
}
}
@Override
public Dimension getPreferredSize() {
if (intersectionImage != null) {
int width = intersectionImage.getWidth();
int height = intersectionImage.getHeight();
return new Dimension(width , height);
}
return super.getPreferredSize();
}
private static void createAndShowGui() {
IntersectionImagePanel mainPanel = new IntersectionImagePanel();
JFrame frame = new JFrame("IntersectionImage");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
확장 구성 요소를 필요로하지 않는 또 다른 방법.
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;
import java.net.URL;
import javax.imageio.ImageIO;
public class ImageOnImage {
ImageOnImage(final BufferedImage bg, BufferedImage fg) {
final BufferedImage scaled = new BufferedImage(
fg.getWidth()/2,fg.getHeight()/2,BufferedImage.TYPE_INT_RGB);
Graphics g = scaled.getGraphics();
g.drawImage(fg,0,0,scaled.getWidth(),scaled.getHeight(),null);
g.dispose();
final int xMax = bg.getWidth()-scaled.getWidth();
final int yMax = bg.getHeight()-scaled.getHeight();
final JLabel label = new JLabel(new ImageIcon(bg));
ActionListener listener = new ActionListener() {
Random random = new Random();
public void actionPerformed(ActionEvent ae) {
Graphics g = bg.getGraphics();
int x = random.nextInt(xMax);
int y = random.nextInt(yMax);
g.drawImage(scaled, x, y, null);
g.dispose();
label.repaint();
}
};
Timer timer = new Timer(1200, listener);
timer.start();
JOptionPane.showMessageDialog(null, label);
}
public static void main(String[] args) throws Exception {
URL url1 = new URL("http://i.stack.imgur.com/lxthA.jpg");
final BufferedImage image1 = ImageIO.read(url1);
URL url2 = new URL("http://i.stack.imgur.com/OVOg3.jpg");
final BufferedImage image2 = ImageIO.read(url2);
//Create the frame on the event dispatching thread
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
new ImageOnImage(image2, image1);
}
});
}
}
고맙습니다.하지만 내 프로젝트에 새로운 개념을 기대하지 않고 있습니다. 다 끝났습니다. 다른 이미지 (도로) 위에 새 이미지 (차량 이미지)를 그릴 수있는 방법을 찾지 못했습니다.). – DZkid
* "다른 이미지 (도로) 위에 새 이미지 (차량 이미지)를 그릴 수있는 방법을 찾지 못했습니다."* 그것이 과거 시제가 아니라면 이해가되지 않습니다. 내 코드는 ** 정확하게 ** ** ** ** ** ** 나는 다른 대답과 그렇게 예상한다. BTW - '차량'에는 'u'가 없습니다. ;) –
나는 찾을 수 없다. & "vehicule"을 위해 그것은 프랑스어로 'u'를 가지고있다. 그리고 나는 프랑스어로 많이 쓰는 데 익숙하다. 나는 의미하지 않았다. 의도적으로 그걸 쓰려면 :) – DZkid
@DZkid : 대답 편집을 참조하십시오. –