GAMMD rev.3

気ままにメモ

JavaでGifアニメーション

public static BufferedImage buffer;
int width = 100;
int height = 12;
int MAX_PAGE = 12;
private void execute() {
 Iterator it = ImageIO.getImageWritersByFormatName("gif");
 ImageWriter iw = it.hasNext() ? (ImageWriter) it.next() : null;
 File outfile = new File("R:/sample.gif");
 
 try {
  buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  IIOMetadata meta = iw.getDefaultImageMetadata(ImageTypeSpecifier.createFromRenderedImage(buffer), null);
  String format = meta.getNativeMetadataFormatName();
  IIOMetadataNode root = (IIOMetadataNode)meta.getAsTree(format);
  int count = 0;
  byte[] data = {
   0x01,
   (byte)((count >> 0) & 0xFF),
   (byte)((count >> 8) & 0xFF)
  };
  IIOMetadataNode list = new IIOMetadataNode("ApplicationExtensions");
  IIOMetadataNode node = new IIOMetadataNode("ApplicationExtension");
  node.setAttribute("applicationID", "NETSCAPE");
  node.setAttribute("authenticationCode", "2.0");
  node.setUserObject(data);
  list.appendChild(node);
  root.appendChild(list);

  node = new IIOMetadataNode("GraphicControlExtension");
  node.setAttribute("disposalMethod", "none");
  node.setAttribute("userInputFlag", "FALSE");
  node.setAttribute("transparentColorFlag", "FALSE");
  node.setAttribute("delayTime", "15");
  node.setAttribute("transparentColorIndex", "0");
  root.appendChild(node);
  meta.setFromTree(format, root);
  
  ImageOutputStream ios = ImageIO.createImageOutputStream(outfile);
  iw.setOutput(ios);
  iw.prepareWriteSequence(meta);
  
  for (int i=0;i< MAX_PAGE; i++){
   buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   Graphics g = buffer.createGraphics();
   g.setColor(Color.white);
   g.fillRect(0, 0, width, height);
   
   g.setColor(Color.red);
   Integer s = (int) (Math.random() * 100000000);
   g.drawString(s.toString(), 0, 12);
   iw.writeToSequence(new IIOImage(buffer, null, meta), null);
  }
  iw.endWriteSequence();
 } catch (IOException ex) {
  ex.printStackTrace();
 }
}

正直ヘッダ部分についてはあまり分かっていません。
細かいことはともかく感じだけ掴めたらいいかな、と。