| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package com.sun.imageio.plugins.gif;  | 
 | 
 | 
 | 
import java.awt.image.ColorModel;  | 
 | 
import java.awt.image.SampleModel;  | 
 | 
import java.util.Locale;  | 
 | 
import javax.imageio.ImageTypeSpecifier;  | 
 | 
import javax.imageio.ImageWriter;  | 
 | 
import javax.imageio.spi.ImageWriterSpi;  | 
 | 
import javax.imageio.stream.ImageOutputStream;  | 
 | 
import com.sun.imageio.plugins.common.PaletteBuilder;  | 
 | 
 | 
 | 
public class GIFImageWriterSpi extends ImageWriterSpi { | 
 | 
 | 
 | 
    private static final String vendorName = "Oracle Corporation";  | 
 | 
 | 
 | 
    private static final String version = "1.0";  | 
 | 
 | 
 | 
    private static final String[] names = { "gif", "GIF" }; | 
 | 
 | 
 | 
    private static final String[] suffixes = { "gif" }; | 
 | 
 | 
 | 
    private static final String[] MIMETypes = { "image/gif" }; | 
 | 
 | 
 | 
    private static final String writerClassName =  | 
 | 
    "com.sun.imageio.plugins.gif.GIFImageWriter";  | 
 | 
 | 
 | 
    private static final String[] readerSpiNames = { | 
 | 
        "com.sun.imageio.plugins.gif.GIFImageReaderSpi"  | 
 | 
    };  | 
 | 
 | 
 | 
    public GIFImageWriterSpi() { | 
 | 
        super(vendorName,  | 
 | 
              version,  | 
 | 
              names,  | 
 | 
              suffixes,  | 
 | 
              MIMETypes,  | 
 | 
              writerClassName,  | 
 | 
              new Class[] { ImageOutputStream.class }, | 
 | 
              readerSpiNames,  | 
 | 
              true,  | 
 | 
              GIFWritableStreamMetadata.NATIVE_FORMAT_NAME,  | 
 | 
              "com.sun.imageio.plugins.gif.GIFStreamMetadataFormat",  | 
 | 
              null, null,  | 
 | 
              true,  | 
 | 
              GIFWritableImageMetadata.NATIVE_FORMAT_NAME,  | 
 | 
              "com.sun.imageio.plugins.gif.GIFImageMetadataFormat",  | 
 | 
              null, null  | 
 | 
              );  | 
 | 
    }  | 
 | 
 | 
 | 
    public boolean canEncodeImage(ImageTypeSpecifier type) { | 
 | 
        if (type == null) { | 
 | 
            throw new IllegalArgumentException("type == null!"); | 
 | 
        }  | 
 | 
 | 
 | 
        SampleModel sm = type.getSampleModel();  | 
 | 
        ColorModel cm = type.getColorModel();  | 
 | 
 | 
 | 
        boolean canEncode = sm.getNumBands() == 1 &&  | 
 | 
            sm.getSampleSize(0) <= 8 &&  | 
 | 
            sm.getWidth() <= 65535 &&  | 
 | 
            sm.getHeight() <= 65535 &&  | 
 | 
            (cm == null || cm.getComponentSize()[0] <= 8);  | 
 | 
 | 
 | 
        if (canEncode) { | 
 | 
            return true;  | 
 | 
        } else { | 
 | 
            return PaletteBuilder.canCreatePalette(type);  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    public String getDescription(Locale locale) { | 
 | 
        return "Standard GIF image writer";  | 
 | 
    }  | 
 | 
 | 
 | 
    public ImageWriter createWriterInstance(Object extension) { | 
 | 
        return new GIFImageWriter(this);  | 
 | 
    }  | 
 | 
}  |