2013-07-21 51 views
0

我剛在這裏偶然發現了這個GifSequenceWriter http://dke-tron.googlecode.com/svn-history/r39/trunk/src/nl/unimaas/games/tron/util/GifSequenceWriter.java。構造函數的代碼是這樣的:這個Java文件中的構造函數在做什麼?

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); 
} 

簡直不明白這個構造函數實質上在做什麼?只是寫一些元數據?有人可以解釋我嗎?爲什麼我需要元數據?

+0

http://docs.oracle.com/javase/6/docs/api/javax/imageio/metadata/doc-files/gif_metadata.html – Karthikeyan

+0

每個圖像格式都會有一些元數據,這個問題都是關於爲什麼它在構造函數中處理? – Karthikeyan

+0

@Karthikeyan這是爲什麼? – user2426316

回答

1

該構造函數顯然設置了GifSequenceWriter,以便具有適當內容的初始元數據將被寫入底層輸出流。

類似的行爲可以在ObjectOutputStream中看到,其中構造函數將頭信息寫入基礎流。

相關問題