/*
 * @(#)JPEGJ2d.java     1.0  02/12/03
 *
 */

import java.awt.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.geom.*;
import java.io.*;
import javax.swing.*;


public class JPEGJ2d extends JApplet {

    private static Image img;

    public void init() {
        setBackground(Color.white);
        img = getToolkit().getImage(JPEGJ2d.class.getResource("duke.jpg"));
        try {
            MediaTracker tracker = new MediaTracker(this);
            tracker.addImage(img, 0);
            tracker.waitForID(0);
        } catch (Exception e) {}
    }


    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
	Dimension d = getSize();
        g2.setBackground(getBackground());
        g2.clearRect(0, 0, d.width, d.height);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_RENDERING,
                            RenderingHints.VALUE_RENDER_QUALITY);
	int w = d.width;
	int h = d.height;


        BufferedImage bi = (BufferedImage) createImage(w, h);
        Graphics2D big = bi.createGraphics();

        big.drawImage(img, 0, 0, null);
        big.setFont(new Font("Dialog", Font.PLAIN, 10));
        big.setColor(Color.black);
        big.drawString("BufferedImage", 4, 12);

	//To rotate the image, comment the following line
        //g2.drawImage(bi, 0, 0, this);

	//comment including g2.drawimage() if you dont want to rotate
	double x = 0.5*w;
        double y = 0.5*h;
        AffineTransform at = new AffineTransform();
        at.rotate(Math.toRadians(90),x,y);
        g2.transform(at);
        g2.drawImage(bi, 0, 0, null);


        try {
             File file = new File("images", "test.jpg");
             FileOutputStream out = new FileOutputStream(file);
            

            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
            param.setQuality(1.0f, false);
            encoder.setJPEGEncodeParam(param);
            encoder.encode(bi);

//	    ImageIO.write(bi, "jpeg", out);
	
	    out.close();
        } catch (Exception ex) {
            g2.setColor(Color.red);
            g2.drawString("write permissions on images/test.jpg?", 5, h*2-5);
        }

	    g2.dispose();
        
    }


    public static void main(String argv[]) {
        final JPEGJ2d demo = new JPEGJ2d();
        demo.init();
        JFrame f = new JFrame("Java 2D(TM) Demo - JPEGJ2d");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        f.getContentPane().add("Center", demo);
        f.pack();
        f.setSize(new Dimension(400,300));
        f.show();
    }
}