user2426316
user2426316

Reputation: 7331

What is the constructor in this Java file doing?

I just stumbled upon this GifSequenceWriter here http://dke-tron.googlecode.com/svn-history/r39/trunk/src/nl/unimaas/games/tron/util/GifSequenceWriter.java . The code of the constructor is this:

public GifSequenceWriter(
  ImageOutputStream outputStream,
  int imageType,
  int timeBetweenFramesMS,
  boolean loopContinuously) throws IIOException, IOException {
// my method to create a writer
gifWriter = getWriter(); 
imageWriteParam = gifWriter.getDefaultWriteParam();
ImageTypeSpecifier imageTypeSpecifier =
  ImageTypeSpecifier.createFromBufferedImageType(imageType);

imageMetaData =
  gifWriter.getDefaultImageMetadata(imageTypeSpecifier,
  imageWriteParam);

String metaFormatName = imageMetaData.getNativeMetadataFormatName();

IIOMetadataNode root = (IIOMetadataNode)
  imageMetaData.getAsTree(metaFormatName);

IIOMetadataNode graphicsControlExtensionNode = getNode(
  root,
  "GraphicControlExtension");

graphicsControlExtensionNode.setAttribute("disposalMethod", "none");
graphicsControlExtensionNode.setAttribute("userInputFlag", "FALSE");
graphicsControlExtensionNode.setAttribute(
  "transparentColorFlag",
  "FALSE");
graphicsControlExtensionNode.setAttribute(
  "delayTime",
  Integer.toString(timeBetweenFramesMS / 10));
graphicsControlExtensionNode.setAttribute(
  "transparentColorIndex",
  "0");

IIOMetadataNode commentsNode = getNode(root, "CommentExtensions");
commentsNode.setAttribute("CommentExtension", "Created by MAH");

IIOMetadataNode appEntensionsNode = getNode(
  root,
  "ApplicationExtensions");

IIOMetadataNode child = new IIOMetadataNode("ApplicationExtension");

child.setAttribute("applicationID", "NETSCAPE");
child.setAttribute("authenticationCode", "2.0");

int loop = loopContinuously ? 0 : 1;

child.setUserObject(new byte[]{ 0x1, (byte) (loop & 0xFF), (byte)
  ((loop >> 8) & 0xFF)});
appEntensionsNode.appendChild(child);

imageMetaData.setFromTree(metaFormatName, root);

gifWriter.setOutput(outputStream);

gifWriter.prepareWriteSequence(null);
}

Is simply dont understand what this constructor is essentially doing? Just writing some Metadata? can someone explain me this? Why do I need metadata?

Upvotes: 0

Views: 143

Answers (1)

Ted Hopp
Ted Hopp

Reputation: 234817

The constructor is apparently setting up the GifSequenceWriter so that the initial metadata with the proper content will have been written to the underlying output stream.

Analogous behavior can be seen in ObjectOutputStream, where the constructor writes header information to the underlying stream.

Upvotes: 1

Related Questions