import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class Main {
public static void draw(BufferedImage imageBG, BufferedImage imageFG) {
Ellipse2D.Double ellipse1 = new Ellipse2D.Double(20,20,30,30);
Ellipse2D.Double ellipse2 = new Ellipse2D.Double(25,25,30,30);
Area circle = new Area(ellipse1);
circle.subtract(new Area(ellipse2));
Graphics2D g = imageBG.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.setClip(circle);
g.drawImage(imageFG, 0, 0, null);
g.setClip(null);
Stroke s = new BasicStroke(2);
g.setStroke(s);
g.setColor(Color.BLACK);
g.draw(circle);
g.dispose();
JLabel l = new JLabel(new ImageIcon(imageBG));
JOptionPane.showMessageDialog(null, l);
}
public static void main(String[] args) throws Exception {
URL urlFG = new URL("http://www.w3cschool.cn/style/download.png");
URL urlBG = new URL("http://www.w3cschool.cn/style/download.png");
final BufferedImage biFG = ImageIO.read(urlFG);
final BufferedImage biBG = ImageIO.read(urlBG);
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
draw(biBG, biFG);
}
});
}
}