// PNGwrite.java  write a .png file
//              java PNGwrite xxx.png

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

public class PNGwrite extends Frame
{
  private Image image;
  public PNGwrite(String filename)
  {
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    image = toolkit.getImage("colorw.png"); // input for test
    MediaTracker mediaTracker = new MediaTracker(this);
    mediaTracker.addImage(image, 0);
    try
    {
      mediaTracker.waitForID(0);
    }
    catch(InterruptedException ie)
    {
      System.err.println(ie);
      System.exit(1);
    }
    addWindowListener(new WindowAdapter()
                      {public void windowClosing(WindowEvent e)
                                                 {System.exit(0);}
                      });
    setSize(image.getWidth(null)+20, image.getHeight(null)+50);
    setTitle(filename);
    setVisible(true); // show();

    // stuff for writing
    RenderedImage rendImage = myRendImage();
    try
    {
      File file = new File(filename);
      ImageIO.write(rendImage, "png", file);
    }
    catch(IOException e)
    {
      System.err.println(e);
      System.exit(1);
    }
  }
  
  public void paint(Graphics g)
  {
    g.drawImage(image, 10, 40, null);
    g.setColor(Color.red);
    g.fillRect(50,60, 40,60);
    g.setColor(Color.blue);
    g.drawString("add stuff to image", 150,150);
  }
  
  // more stuff for writing
  public RenderedImage myRendImage()
  {
    BufferedImage bufferedImage =
      new BufferedImage(500,500, BufferedImage.TYPE_INT_RGB);
    Graphics g = bufferedImage.createGraphics();
    // must clear background
    g.setColor(Color.white);
    g.fillRect(0,0, 500,500);
    // duplicate normal drawing in paint
    g.drawImage(image, 10, 40, null);
    g.setColor(Color.red);
    g.fillRect(50,60, 40,60);
    g.setColor(Color.blue);
    g.drawString("add stuff to image", 150,150);
    // finished with g, return bufferedImage object
    g.dispose();
    return bufferedImage;
  }
  
  public static void main(String[] args)
  {
    new PNGwrite(args[0]);
  }
} // end class PNGwrite

