ImageDuplicity.java Source code

Java tutorial

Introduction

Here is the source code for ImageDuplicity.java

Source

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