configure GIF Frame - Java 2D Graphics

Java examples for 2D Graphics:GIF

Description

configure GIF Frame

Demo Code


//package com.java2s;

import javax.imageio.metadata.IIOInvalidTreeException;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.metadata.IIOMetadataNode;

import org.w3c.dom.Node;

public class Main {
    private static void configureGIFFrame(final IIOMetadata meta,
            final String delayTime, final int imageIndex,
            final String disposalMethod, final int loopCount) {
        final String metaFormat = meta.getNativeMetadataFormatName();

        if (!"javax_imageio_gif_image_1.0".equals(metaFormat)) {
            throw new IllegalArgumentException(
                    "Unfamiliar gif metadata format: " + metaFormat);
        }/* ww  w .  j ava2 s  .com*/

        final Node root = meta.getAsTree(metaFormat);

        Node child = root.getFirstChild();
        while (child != null) {
            if ("GraphicControlExtension".equals(child.getNodeName())) {
                break;
            }
            child = child.getNextSibling();
        }

        final IIOMetadataNode gce = (IIOMetadataNode) child;
        gce.setAttribute("userDelay", "FALSE");
        gce.setAttribute("delayTime", delayTime);
        gce.setAttribute("disposalMethod", disposalMethod);

        if (imageIndex == 0) {
            final IIOMetadataNode aes = new IIOMetadataNode(
                    "ApplicationExtensions");
            final IIOMetadataNode ae = new IIOMetadataNode(
                    "ApplicationExtension");
            ae.setAttribute("applicationID", "NETSCAPE");
            ae.setAttribute("authenticationCode", "2.0");
            final byte[] uo = new byte[] { 0x1, (byte) (loopCount & 0xFF),
                    (byte) (loopCount >> 8 & 0xFF) };
            ae.setUserObject(uo);
            aes.appendChild(ae);
            root.appendChild(aes);
        }

        try {
            meta.setFromTree(metaFormat, root);
        } catch (final IIOInvalidTreeException e) {
            throw new Error(e);
        }
    }
}

Related Tutorials