import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import javax.swing.JFrame;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
public class ImageDuplicity extends Component {
private BufferedImage image;
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (image == null)
createOffscreenImage();
g2.drawImage(image, 0, 0, this);
}
private void createOffscreenImage() {
Dimension d = getSize();
int width = d.width;
int height = d.height;
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
try {
String filename = "largeJava2sLogo.jpg";
InputStream in = getClass().getResourceAsStream(filename);
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
BufferedImage image = decoder.decodeAsBufferedImage();
in.close();
g2.drawImage(image, 0, 0, width, height, null);
} catch (Exception e) {
System.out.print(e);
}
g2.setStroke(new BasicStroke(2));
Color[] colors = { Color.red, Color.blue, Color.green };
for (int i = -32; i < 40; i += 8) {
g2.setPaint(colors[Math.abs(i) % 3]);
g2.drawOval(i, i, width - i * 2, height - i * 2);
}
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setLayout(new BorderLayout());
Component c = new ImageDuplicity();
f.add(c, BorderLayout.CENTER);
f.setSize(200, 250);
f.setVisible(true);
}
} |