首页javadrawJava Graphics - 如何并排绘制2个图像

Java Graphics - 如何并排绘制2个图像

我们想知道如何并排绘制2个图像。
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Main {
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        try {
          frame.add(new MyPanel());
        } catch (Exception e) {
          e.printStackTrace();
        }
        frame.setSize(250, 250);
        frame.setVisible(true);
      }
    });
  }
}

class MyPanel extends JPanel {
  public MyPanel() throws Exception {
    setLayout(new FlowLayout());
    int size = 100;

    URL url = new URL("http://www.w3cschool.cn/style/download.png");
    BufferedImage bi = ImageIO.read(url);
    
    Image left = createImage(size, Color.YELLOW);
    
    Image merged = merge(left, bi);

    add(new JLabel(new ImageIcon(merged)));
  }

  public static Image createImage(int size, Color color) {
    BufferedImage image = new BufferedImage(size, size,
        BufferedImage.TYPE_INT_RGB);
    Graphics2D g = image.createGraphics();
    g.setColor(color);
    g.fillRect(0, 0, size, size);
    g.dispose();
    return image;
  }

  public static Image merge(Image left, Image right) {
    BufferedImage merged = new BufferedImage(left.getWidth(null)
        + right.getWidth(null), left.getHeight(null),
        BufferedImage.TYPE_INT_RGB);
    Graphics2D g = (Graphics2D) merged.getGraphics();
    g.drawImage(left, 0, 0, null);
    g.drawImage(right, left.getWidth(null), 0, null);
    return merged;
  }
}