/* * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.imageio.plugins.gif; import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.imageio.ImageTypeSpecifier;import javax.imageio.metadata.IIOInvalidTreeException;import javax.imageio.metadata.IIOMetadata;import javax.imageio.metadata.IIOMetadataNode;import javax.imageio.metadata.IIOMetadataFormat;import javax.imageio.metadata.IIOMetadataFormatImpl;import org.w3c.dom.Node; public class GIFImageMetadata extends GIFMetadata { // package scope static final String nativeMetadataFormatName = "javax_imageio_gif_image_1.0"; static final String[] disposalMethodNames = { "none", "doNotDispose", "restoreToBackgroundColor", "restoreToPrevious", "undefinedDisposalMethod4", "undefinedDisposalMethod5", "undefinedDisposalMethod6", "undefinedDisposalMethod7" }; // Fields from Image Descriptor public int imageLeftPosition; public int imageTopPosition; public int imageWidth; public int imageHeight; public boolean interlaceFlag = false; public boolean sortFlag = false; public byte[] localColorTable = null; // Fields from Graphic Control Extension public int disposalMethod = 0; public boolean userInputFlag = false; public boolean transparentColorFlag = false; public int delayTime = 0; public int transparentColorIndex = 0; // Fields from Plain Text Extension public boolean hasPlainTextExtension = false; public int textGridLeft; public int textGridTop; public int textGridWidth; public int textGridHeight; public int characterCellWidth; public int characterCellHeight; public int textForegroundColor; public int textBackgroundColor; public byte[] text; // Fields from ApplicationExtension // List of byte[] public List applicationIDs = null; // new ArrayList(); // List of byte[] public List authenticationCodes = null; // new ArrayList(); // List of byte[] public List applicationData = null; // new ArrayList(); // Fields from CommentExtension // List of byte[] public List comments = null; // new ArrayList(); protected GIFImageMetadata(boolean standardMetadataFormatSupported, String nativeMetadataFormatName, String nativeMetadataFormatClassName, String[] extraMetadataFormatNames, String[] extraMetadataFormatClassNames) { super(standardMetadataFormatSupported, nativeMetadataFormatName, nativeMetadataFormatClassName, extraMetadataFormatNames, extraMetadataFormatClassNames); } public GIFImageMetadata() { this(true, nativeMetadataFormatName, "com.sun.imageio.plugins.gif.GIFImageMetadataFormat", null, null); } public boolean isReadOnly() { return true; } public Node getAsTree(String formatName) { if (formatName.equals(nativeMetadataFormatName)) { return getNativeTree(); } else if (formatName.equals (IIOMetadataFormatImpl.standardMetadataFormatName)) { return getStandardTree(); } else { throw new IllegalArgumentException("Not a recognized format!"); } } private String toISO8859(byte[] data) { try { return new String(data, "ISO-8859-1"); } catch (UnsupportedEncodingException e) { return ""; } } private Node getNativeTree() { IIOMetadataNode node; // scratch node IIOMetadataNode root = new IIOMetadataNode(nativeMetadataFormatName); // Image descriptor node = new IIOMetadataNode("ImageDescriptor"); node.setAttribute("imageLeftPosition", Integer.toString(imageLeftPosition)); node.setAttribute("imageTopPosition", Integer.toString(imageTopPosition)); node.setAttribute("imageWidth", Integer.toString(imageWidth)); node.setAttribute("imageHeight", Integer.toString(imageHeight)); node.setAttribute("interlaceFlag", interlaceFlag ? "TRUE" : "FALSE"); root.appendChild(node); // Local color table if (localColorTable != null) { node = new IIOMetadataNode("LocalColorTable"); int numEntries = localColorTable.length/3; node.setAttribute("sizeOfLocalColorTable", Integer.toString(numEntries)); node.setAttribute("sortFlag", sortFlag ? "TRUE" : "FALSE"); for (int i = 0; i < numEntries; i++) { IIOMetadataNode entry = new IIOMetadataNode("ColorTableEntry"); entry.setAttribute("index", Integer.toString(i)); int r = localColorTable[3*i] & 0xff; int g = localColorTable[3*i + 1] & 0xff; int b = localColorTable[3*i + 2] & 0xff; entry.setAttribute("red", Integer.toString(r)); entry.setAttribute("green", Integer.toString(g)); entry.setAttribute("blue", Integer.toString(b)); node.appendChild(entry); } root.appendChild(node); } // Graphic control extension node = new IIOMetadataNode("GraphicControlExtension"); node.setAttribute("disposalMethod", disposalMethodNames[disposalMethod]); node.setAttribute("userInputFlag", userInputFlag ? "TRUE" : "FALSE"); node.setAttribute("transparentColorFlag", transparentColorFlag ? "TRUE" : "FALSE"); node.setAttribute("delayTime", Integer.toString(delayTime)); node.setAttribute("transparentColorIndex", Integer.toString(transparentColorIndex)); root.appendChild(node); if (hasPlainTextExtension) { node = new IIOMetadataNode("PlainTextExtension"); node.setAttribute("textGridLeft", Integer.toString(textGridLeft)); node.setAttribute("textGridTop", Integer.toString(textGridTop)); node.setAttribute("textGridWidth", Integer.toString(textGridWidth)); node.setAttribute("textGridHeight", Integer.toString(textGridHeight)); node.setAttribute("characterCellWidth", Integer.toString(characterCellWidth)); node.setAttribute("characterCellHeight", Integer.toString(characterCellHeight)); node.setAttribute("textForegroundColor", Integer.toString(textForegroundColor)); node.setAttribute("textBackgroundColor", Integer.toString(textBackgroundColor)); node.setAttribute("text", toISO8859(text)); root.appendChild(node); } // Application extensions int numAppExtensions = applicationIDs == null ? 0 : applicationIDs.size(); if (numAppExtensions > 0) { node = new IIOMetadataNode("ApplicationExtensions"); for (int i = 0; i < numAppExtensions; i++) { IIOMetadataNode appExtNode = new IIOMetadataNode("ApplicationExtension"); byte[] applicationID = (byte[])applicationIDs.get(i); appExtNode.setAttribute("applicationID", toISO8859(applicationID)); byte[] authenticationCode = (byte[])authenticationCodes.get(i); appExtNode.setAttribute("authenticationCode", toISO8859(authenticationCode)); byte[] appData = (byte[])applicationData.get(i); appExtNode.setUserObject((byte[])appData.clone()); node.appendChild(appExtNode); } root.appendChild(node); } // Comment extensions int numComments = comments == null ? 0 : comments.size(); if (numComments > 0) { node = new IIOMetadataNode("CommentExtensions"); for (int i = 0; i < numComments; i++) { IIOMetadataNode commentNode = new IIOMetadataNode("CommentExtension"); byte[] comment = (byte[])comments.get(i); commentNode.setAttribute("value", toISO8859(comment)); node.appendChild(commentNode); } root.appendChild(node); } return root; } public IIOMetadataNode getStandardChromaNode() { IIOMetadataNode chroma_node = new IIOMetadataNode("Chroma"); IIOMetadataNode node = null; // scratch node node = new IIOMetadataNode("ColorSpaceType"); node.setAttribute("name", "RGB"); chroma_node.appendChild(node); node = new IIOMetadataNode("NumChannels"); node.setAttribute("value", transparentColorFlag ? "4" : "3"); chroma_node.appendChild(node); // Gamma not in format node = new IIOMetadataNode("BlackIsZero"); node.setAttribute("value", "TRUE"); chroma_node.appendChild(node); if (localColorTable != null) { node = new IIOMetadataNode("Palette"); int numEntries = localColorTable.length/3; for (int i = 0; i < numEntries; i++) { IIOMetadataNode entry = new IIOMetadataNode("PaletteEntry"); entry.setAttribute("index", Integer.toString(i)); entry.setAttribute("red", Integer.toString(localColorTable[3*i] & 0xff)); entry.setAttribute("green", Integer.toString(localColorTable[3*i + 1] & 0xff)); entry.setAttribute("blue", Integer.toString(localColorTable[3*i + 2] & 0xff)); node.appendChild(entry); } chroma_node.appendChild(node); } // BackgroundIndex not in image // BackgroundColor not in format return chroma_node; } public IIOMetadataNode getStandardCompressionNode() { IIOMetadataNode compression_node = new IIOMetadataNode("Compression"); IIOMetadataNode node = null; // scratch node node = new IIOMetadataNode("CompressionTypeName"); node.setAttribute("value", "lzw"); compression_node.appendChild(node); node = new IIOMetadataNode("Lossless"); node.setAttribute("value", "TRUE"); compression_node.appendChild(node); node = new IIOMetadataNode("NumProgressiveScans"); node.setAttribute("value", interlaceFlag ? "4" : "1"); compression_node.appendChild(node); // BitRate not in format return compression_node; } public IIOMetadataNode getStandardDataNode() { IIOMetadataNode data_node = new IIOMetadataNode("Data"); IIOMetadataNode node = null; // scratch node // PlanarConfiguration not in format node = new IIOMetadataNode("SampleFormat"); node.setAttribute("value", "Index"); data_node.appendChild(node); // BitsPerSample not in image // SignificantBitsPerSample not in format // SampleMSB not in format return data_node; } public IIOMetadataNode getStandardDimensionNode() { IIOMetadataNode dimension_node = new IIOMetadataNode("Dimension"); IIOMetadataNode node = null; // scratch node // PixelAspectRatio not in image node = new IIOMetadataNode("ImageOrientation"); node.setAttribute("value", "Normal"); dimension_node.appendChild(node); // HorizontalPixelSize not in format // VerticalPixelSize not in format // HorizontalPhysicalPixelSpacing not in format // VerticalPhysicalPixelSpacing not in format // HorizontalPosition not in format // VerticalPosition not in format node = new IIOMetadataNode("HorizontalPixelOffset"); node.setAttribute("value", Integer.toString(imageLeftPosition)); dimension_node.appendChild(node); node = new IIOMetadataNode("VerticalPixelOffset"); node.setAttribute("value", Integer.toString(imageTopPosition)); dimension_node.appendChild(node); // HorizontalScreenSize not in image // VerticalScreenSize not in image return dimension_node; } // Document not in image public IIOMetadataNode getStandardTextNode() { if (comments == null) { return null; } Iterator commentIter = comments.iterator(); if (!commentIter.hasNext()) { return null; } IIOMetadataNode text_node = new IIOMetadataNode("Text"); IIOMetadataNode node = null; // scratch node while (commentIter.hasNext()) { byte[] comment = (byte[])commentIter.next(); String s = null; try { s = new String(comment, "ISO-8859-1"); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Encoding ISO-8859-1 unknown!"); } node = new IIOMetadataNode("TextEntry"); node.setAttribute("value", s); node.setAttribute("encoding", "ISO-8859-1"); node.setAttribute("compression", "none"); text_node.appendChild(node); } return text_node; } public IIOMetadataNode getStandardTransparencyNode() { if (!transparentColorFlag) { return null; } IIOMetadataNode transparency_node = new IIOMetadataNode("Transparency"); IIOMetadataNode node = null; // scratch node // Alpha not in format node = new IIOMetadataNode("TransparentIndex"); node.setAttribute("value", Integer.toString(transparentColorIndex)); transparency_node.appendChild(node); // TransparentColor not in format // TileTransparencies not in format // TileOpacities not in format return transparency_node; } public void setFromTree(String formatName, Node root) throws IIOInvalidTreeException { throw new IllegalStateException("Metadata is read-only!"); } protected void mergeNativeTree(Node root) throws IIOInvalidTreeException { throw new IllegalStateException("Metadata is read-only!"); } protected void mergeStandardTree(Node root) throws IIOInvalidTreeException { throw new IllegalStateException("Metadata is read-only!"); } public void reset() { throw new IllegalStateException("Metadata is read-only!"); }}
/*
* Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.imageio.plugins.gif;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.metadata.IIOInvalidTreeException;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.metadata.IIOMetadataNode;
import javax.imageio.metadata.IIOMetadataFormat;
import javax.imageio.metadata.IIOMetadataFormatImpl;
import org.w3c.dom.Node;
public class GIFImageMetadata extends GIFMetadata {
// package scope
static final String
nativeMetadataFormatName = "javax_imageio_gif_image_1.0";
static final String[] disposalMethodNames = {
"none",
"doNotDispose",
"restoreToBackgroundColor",
"restoreToPrevious",
"undefinedDisposalMethod4",
"undefinedDisposalMethod5",
"undefinedDisposalMethod6",
"undefinedDisposalMethod7"
};
// Fields from Image Descriptor
public int imageLeftPosition;
public int imageTopPosition;
public int imageWidth;
public int imageHeight;
public boolean interlaceFlag = false;
public boolean sortFlag = false;
public byte[] localColorTable = null;
// Fields from Graphic Control Extension
public int disposalMethod = 0;
public boolean userInputFlag = false;
public boolean transparentColorFlag = false;
public int delayTime = 0;
public int transparentColorIndex = 0;
// Fields from Plain Text Extension
public boolean hasPlainTextExtension = false;
public int textGridLeft;
public int textGridTop;
public int textGridWidth;
public int textGridHeight;
public int characterCellWidth;
public int characterCellHeight;
public int textForegroundColor;
public int textBackgroundColor;
public byte[] text;
// Fields from ApplicationExtension
// List of byte[]
public List applicationIDs = null; // new ArrayList();
// List of byte[]
public List authenticationCodes = null; // new ArrayList();
// List of byte[]
public List applicationData = null; // new ArrayList();
// Fields from CommentExtension
// List of byte[]
public List comments = null; // new ArrayList();
protected GIFImageMetadata(boolean standardMetadataFormatSupported,
String nativeMetadataFormatName,
String nativeMetadataFormatClassName,
String[] extraMetadataFormatNames,
String[] extraMetadataFormatClassNames)
{
super(standardMetadataFormatSupported,
nativeMetadataFormatName,
nativeMetadataFormatClassName,
extraMetadataFormatNames,
extraMetadataFormatClassNames);
}
public GIFImageMetadata() {
this(true,
nativeMetadataFormatName,
"com.sun.imageio.plugins.gif.GIFImageMetadataFormat",
null, null);
}
public boolean isReadOnly() {
return true;
}
public Node getAsTree(String formatName) {
if (formatName.equals(nativeMetadataFormatName)) {
return getNativeTree();
} else if (formatName.equals
(IIOMetadataFormatImpl.standardMetadataFormatName)) {
return getStandardTree();
} else {
throw new IllegalArgumentException("Not a recognized format!");
}
}
private String toISO8859(byte[] data) {
try {
return new String(data, "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
return "";
}
}
private Node getNativeTree() {
IIOMetadataNode node; // scratch node
IIOMetadataNode root =
new IIOMetadataNode(nativeMetadataFormatName);
// Image descriptor
node = new IIOMetadataNode("ImageDescriptor");
node.setAttribute("imageLeftPosition",
Integer.toString(imageLeftPosition));
node.setAttribute("imageTopPosition",
Integer.toString(imageTopPosition));
node.setAttribute("imageWidth", Integer.toString(imageWidth));
node.setAttribute("imageHeight", Integer.toString(imageHeight));
node.setAttribute("interlaceFlag",
interlaceFlag ? "TRUE" : "FALSE");
root.appendChild(node);
// Local color table
if (localColorTable != null) {
node = new IIOMetadataNode("LocalColorTable");
int numEntries = localColorTable.length/3;
node.setAttribute("sizeOfLocalColorTable",
Integer.toString(numEntries));
node.setAttribute("sortFlag",
sortFlag ? "TRUE" : "FALSE");
for (int i = 0; i < numEntries; i++) {
IIOMetadataNode entry =
new IIOMetadataNode("ColorTableEntry");
entry.setAttribute("index", Integer.toString(i));
int r = localColorTable[3*i] & 0xff;
int g = localColorTable[3*i + 1] & 0xff;
int b = localColorTable[3*i + 2] & 0xff;
entry.setAttribute("red", Integer.toString(r));
entry.setAttribute("green", Integer.toString(g));
entry.setAttribute("blue", Integer.toString(b));
node.appendChild(entry);
}
root.appendChild(node);
}
// Graphic control extension
node = new IIOMetadataNode("GraphicControlExtension");
node.setAttribute("disposalMethod",
disposalMethodNames[disposalMethod]);
node.setAttribute("userInputFlag",
userInputFlag ? "TRUE" : "FALSE");
node.setAttribute("transparentColorFlag",
transparentColorFlag ? "TRUE" : "FALSE");
node.setAttribute("delayTime",
Integer.toString(delayTime));
node.setAttribute("transparentColorIndex",
Integer.toString(transparentColorIndex));
root.appendChild(node);
if (hasPlainTextExtension) {
node = new IIOMetadataNode("PlainTextExtension");
node.setAttribute("textGridLeft",
Integer.toString(textGridLeft));
node.setAttribute("textGridTop",
Integer.toString(textGridTop));
node.setAttribute("textGridWidth",
Integer.toString(textGridWidth));
node.setAttribute("textGridHeight",
Integer.toString(textGridHeight));
node.setAttribute("characterCellWidth",
Integer.toString(characterCellWidth));
node.setAttribute("characterCellHeight",
Integer.toString(characterCellHeight));
node.setAttribute("textForegroundColor",
Integer.toString(textForegroundColor));
node.setAttribute("textBackgroundColor",
Integer.toString(textBackgroundColor));
node.setAttribute("text", toISO8859(text));
root.appendChild(node);
}
// Application extensions
int numAppExtensions = applicationIDs == null ?
0 : applicationIDs.size();
if (numAppExtensions > 0) {
node = new IIOMetadataNode("ApplicationExtensions");
for (int i = 0; i < numAppExtensions; i++) {
IIOMetadataNode appExtNode =
new IIOMetadataNode("ApplicationExtension");
byte[] applicationID = (byte[])applicationIDs.get(i);
appExtNode.setAttribute("applicationID",
toISO8859(applicationID));
byte[] authenticationCode = (byte[])authenticationCodes.get(i);
appExtNode.setAttribute("authenticationCode",
toISO8859(authenticationCode));
byte[] appData = (byte[])applicationData.get(i);
appExtNode.setUserObject((byte[])appData.clone());
node.appendChild(appExtNode);
}
root.appendChild(node);
}
// Comment extensions
int numComments = comments == null ? 0 : comments.size();
if (numComments > 0) {
node = new IIOMetadataNode("CommentExtensions");
for (int i = 0; i < numComments; i++) {
IIOMetadataNode commentNode =
new IIOMetadataNode("CommentExtension");
byte[] comment = (byte[])comments.get(i);
commentNode.setAttribute("value", toISO8859(comment));
node.appendChild(commentNode);
}
root.appendChild(node);
}
return root;
}
public IIOMetadataNode getStandardChromaNode() {
IIOMetadataNode chroma_node = new IIOMetadataNode("Chroma");
IIOMetadataNode node = null; // scratch node
node = new IIOMetadataNode("ColorSpaceType");
node.setAttribute("name", "RGB");
chroma_node.appendChild(node);
node = new IIOMetadataNode("NumChannels");
node.setAttribute("value", transparentColorFlag ? "4" : "3");
chroma_node.appendChild(node);
// Gamma not in format
node = new IIOMetadataNode("BlackIsZero");
node.setAttribute("value", "TRUE");
chroma_node.appendChild(node);
if (localColorTable != null) {
node = new IIOMetadataNode("Palette");
int numEntries = localColorTable.length/3;
for (int i = 0; i < numEntries; i++) {
IIOMetadataNode entry =
new IIOMetadataNode("PaletteEntry");
entry.setAttribute("index", Integer.toString(i));
entry.setAttribute("red",
Integer.toString(localColorTable[3*i] & 0xff));
entry.setAttribute("green",
Integer.toString(localColorTable[3*i + 1] & 0xff));
entry.setAttribute("blue",
Integer.toString(localColorTable[3*i + 2] & 0xff));
node.appendChild(entry);
}
chroma_node.appendChild(node);
}
// BackgroundIndex not in image
// BackgroundColor not in format
return chroma_node;
}
public IIOMetadataNode getStandardCompressionNode() {
IIOMetadataNode compression_node = new IIOMetadataNode("Compression");
IIOMetadataNode node = null; // scratch node
node = new IIOMetadataNode("CompressionTypeName");
node.setAttribute("value", "lzw");
compression_node.appendChild(node);
node = new IIOMetadataNode("Lossless");
node.setAttribute("value", "TRUE");
compression_node.appendChild(node);
node = new IIOMetadataNode("NumProgressiveScans");
node.setAttribute("value", interlaceFlag ? "4" : "1");
compression_node.appendChild(node);
// BitRate not in format
return compression_node;
}
public IIOMetadataNode getStandardDataNode() {
IIOMetadataNode data_node = new IIOMetadataNode("Data");
IIOMetadataNode node = null; // scratch node
// PlanarConfiguration not in format
node = new IIOMetadataNode("SampleFormat");
node.setAttribute("value", "Index");
data_node.appendChild(node);
// BitsPerSample not in image
// SignificantBitsPerSample not in format
// SampleMSB not in format
return data_node;
}
public IIOMetadataNode getStandardDimensionNode() {
IIOMetadataNode dimension_node = new IIOMetadataNode("Dimension");
IIOMetadataNode node = null; // scratch node
// PixelAspectRatio not in image
node = new IIOMetadataNode("ImageOrientation");
node.setAttribute("value", "Normal");
dimension_node.appendChild(node);
// HorizontalPixelSize not in format
// VerticalPixelSize not in format
// HorizontalPhysicalPixelSpacing not in format
// VerticalPhysicalPixelSpacing not in format
// HorizontalPosition not in format
// VerticalPosition not in format
node = new IIOMetadataNode("HorizontalPixelOffset");
node.setAttribute("value", Integer.toString(imageLeftPosition));
dimension_node.appendChild(node);
node = new IIOMetadataNode("VerticalPixelOffset");
node.setAttribute("value", Integer.toString(imageTopPosition));
dimension_node.appendChild(node);
// HorizontalScreenSize not in image
// VerticalScreenSize not in image
return dimension_node;
}
// Document not in image
public IIOMetadataNode getStandardTextNode() {
if (comments == null) {
return null;
}
Iterator commentIter = comments.iterator();
if (!commentIter.hasNext()) {
return null;
}
IIOMetadataNode text_node = new IIOMetadataNode("Text");
IIOMetadataNode node = null; // scratch node
while (commentIter.hasNext()) {
byte[] comment = (byte[])commentIter.next();
String s = null;
try {
s = new String(comment, "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Encoding ISO-8859-1 unknown!");
}
node = new IIOMetadataNode("TextEntry");
node.setAttribute("value", s);
node.setAttribute("encoding", "ISO-8859-1");
node.setAttribute("compression", "none");
text_node.appendChild(node);
}
return text_node;
}
public IIOMetadataNode getStandardTransparencyNode() {
if (!transparentColorFlag) {
return null;
}
IIOMetadataNode transparency_node =
new IIOMetadataNode("Transparency");
IIOMetadataNode node = null; // scratch node
// Alpha not in format
node = new IIOMetadataNode("TransparentIndex");
node.setAttribute("value",
Integer.toString(transparentColorIndex));
transparency_node.appendChild(node);
// TransparentColor not in format
// TileTransparencies not in format
// TileOpacities not in format
return transparency_node;
}
public void setFromTree(String formatName, Node root)
throws IIOInvalidTreeException
{
throw new IllegalStateException("Metadata is read-only!");
}
protected void mergeNativeTree(Node root) throws IIOInvalidTreeException
{
throw new IllegalStateException("Metadata is read-only!");
}
protected void mergeStandardTree(Node root) throws IIOInvalidTreeException
{
throw new IllegalStateException("Metadata is read-only!");
}
public void reset() {
throw new IllegalStateException("Metadata is read-only!");
}
}