¿Cómo dibujar una imagen sobre otra imagen?

Tengo un proyecto de Java que trata sobre simulación de tráfico en una ciudad aleatoria, he logrado encontrar una forma de implementar este proyecto, así que dividí cada intersección en una sección que básicamente es una clase JPanel extendida (llamada Carrefour). .Todo funciona bien hasta que me quedé atrapado con la forma de dibujar vehículos y hacerlos pasar por las carreteras.

Entonces, ¿mi problema es cómo dibujar una imagen (imagen del vehículo) sobre otra imagen (camino)?

Si esto es Swing, dibuje la imagen de fondo en una Imagen Buffered. Muestre esta Imagen Buffered en el método paintComponent de JComponent (como el de JPanel) utilizando el método drawImage(...) Graphic, y luego dibuje las imágenes cambiantes sobre esto en el mismo método paintComponent. Sin embargo, primero super.paintComponent(...) llamar al super.paintComponent(...) .

Tenga en cuenta que esta pregunta se ha formulado bastante aquí y en otros lugares, y como era de esperar, hay muchos ejemplos de este tipo de cosas que puede encontrar aquí con un poco de búsqueda.

Editar
Usted pregunta:

Gracias, así es como dibujo la primera imagen (camino)

De nuevo, crearía una Imagen Buffered para esto, probablemente usando ImageIO.read(...) . Luego, dibuja esto en el método paintComponent(Graphics g) g.drawImage(...) anula el uso de g.drawImage(...) .

Por ejemplo…

 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(); } }); } } 

Otro enfoque que no requiere extender componentes.

enter image description here

 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); } }); } } 
    Intereting Posts