import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import Acme.JPM.Encoders.*;
import java.io.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;

public class TestFrame extends JFrame {
  Image im;
  BufferedImage bim;
  TestFrame() {
    this.addWindowListener(new WindowAdapter() {
      public void WindowClosed(WindowEvent e) {
        TestFrame.this.dispose();
      }
    });

    im = createImage(0, 0);
  }


  public void paint(Graphics g) {
    g.drawImage(im, 0, 0, this);
  }

  public static void main(String[] args) {
    TestFrame tf = new TestFrame();
    tf.setSize(500, 500);
    tf.show();
    Dimension d = tf.getSize();
    int x = d.width;
    int y = d.height;

    //para o GIF devo obter uma imagem
    tf.im = tf.createImage(x, y);
    Graphics g = tf.im.getGraphics();
    g.setColor(Color.magenta);
    g.fillRect(0, 0, x, y);
    g.setColor(Color.darkGray);
    Font font = new Font("Monospaced", Font.BOLD + Font.ITALIC, 30);
    g.setFont(font);
    g.drawString("para GIF", 100, font.getSize() + 100);

    // no caso de jpeg, deve ser escrito no contexto grafico de um
    // BufferedImage (que obtenho do frame)
    tf.bim = tf.getGraphicsConfiguration().createCompatibleImage(x, y);
    g = tf.bim.getGraphics();
    g.setColor(Color.magenta);
    g.fillRect(0, 0, x, y);
    g.setColor(Color.darkGray);
    g.setFont(font);
    g.drawString("para jpeg", 100, font.getSize() + 100);

    // aqui comeca o assunto das imagens
    try {
      // em primeiro lugar o GIF
      BufferedOutputStream outGif = new BufferedOutputStream(
                                   new FileOutputStream("imagen.gif"));
      GifEncoder ge = new GifEncoder(tf.im, outGif);
      ge.encode();
      outGif.close();

      // agora o jpeg
      BufferedOutputStream outJpeg = new BufferedOutputStream(
                                   new FileOutputStream("imagen.jpg"));
      JPEGImageEncoder je = JPEGCodec.createJPEGEncoder(outJpeg);
      je.encode(tf.bim);
      outJpeg.close();
      //
    } catch(FileNotFoundException e) {
      System.out.println("arquivo nao encontrado\n " + e.toString());
    } catch(IOException e) {
      System.out.println("Problema codificando imagem\n " + e.toString());
    }
    tf.repaint();
  }

}

