/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ package javax.imageio.spi; import javax.imageio.stream.ImageInputStream; import javax.imageio.ImageTypeSpecifier; import javax.imageio.ImageWriter; import java.awt.image.RenderedImage; import java.io.IOException; /** * The ImageWriterSpi abstract class is a service provider interface (SPI) for * ImageWriters. * * @since Android 1.0 */ public abstract class ImageWriterSpi extends ImageReaderWriterSpi { /** * The STANDARD_OUTPUT_TYPE contains ImageInputStream.class. */ public static final Class[] STANDARD_OUTPUT_TYPE = new Class[] { ImageInputStream.class }; /** * The output types. */ protected Class[] outputTypes; /** * The reader SPI names. */ protected String[] readerSpiNames; /** * Instantiates a new ImageWriterSpi. */ protected ImageWriterSpi() { throw new UnsupportedOperationException("Not supported yet"); } /** * Instantiates a new ImageWriterSpi with the specified parameters. * * @param vendorName * the vendor name. * @param version * the version. * @param names * the format names. * @param suffixes * the array of strings representing the file suffixes. * @param MIMETypes * the an array of strings representing MIME types. * @param pluginClassName * the plug-in class name. * @param outputTypes * the output types. * @param readerSpiNames * the array of strings with class names of all associated * ImageReaders. * @param supportsStandardStreamMetadataFormat * the value indicating if stream metadata can be described by * standard metadata format. * @param nativeStreamMetadataFormatName * the native stream metadata format name, returned by * getNativeStreamMetadataFormatName. * @param nativeStreamMetadataFormatClassName * the native stream metadata format class name, returned by * getNativeStreamMetadataFormat. * @param extraStreamMetadataFormatNames * the extra stream metadata format names, returned by * getExtraStreamMetadataFormatNames. * @param extraStreamMetadataFormatClassNames * the extra stream metadata format class names, returned by * getStreamMetadataFormat. * @param supportsStandardImageMetadataFormat * the value indicating if image metadata can be described by * standard metadata format. * @param nativeImageMetadataFormatName * the native image metadata format name, returned by * getNativeImageMetadataFormatName. * @param nativeImageMetadataFormatClassName * the native image metadata format class name, returned by * getNativeImageMetadataFormat. * @param extraImageMetadataFormatNames * the extra image metadata format names, returned by * getExtraImageMetadataFormatNames. * @param extraImageMetadataFormatClassNames * the extra image metadata format class names, returned by * getImageMetadataFormat. */ public ImageWriterSpi(String vendorName, String version, String[] names, String[] suffixes, String[] MIMETypes, String pluginClassName, Class[] outputTypes, String[] readerSpiNames, boolean supportsStandardStreamMetadataFormat, String nativeStreamMetadataFormatName, String nativeStreamMetadataFormatClassName, String[] extraStreamMetadataFormatNames, String[] extraStreamMetadataFormatClassNames, boolean supportsStandardImageMetadataFormat, String nativeImageMetadataFormatName, String nativeImageMetadataFormatClassName, String[] extraImageMetadataFormatNames, String[] extraImageMetadataFormatClassNames) { super(vendorName, version, names, suffixes, MIMETypes, pluginClassName, supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName, nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames, extraStreamMetadataFormatClassNames, supportsStandardImageMetadataFormat, nativeImageMetadataFormatName, nativeImageMetadataFormatClassName, extraImageMetadataFormatNames, extraImageMetadataFormatClassNames); if (outputTypes == null || outputTypes.length == 0) { throw new NullPointerException("output types array cannot be NULL or empty"); } this.outputTypes = outputTypes; this.readerSpiNames = readerSpiNames; } /** * Returns true if the format of the writer's output is lossless. The * default implementation returns true. * * @return true, if a format is lossless, false otherwise. */ public boolean isFormatLossless() { return true; } /** * Gets an array of Class objects whose types can be used as output for this * writer. * * @return the output types. */ public Class[] getOutputTypes() { return outputTypes; } /** * Checks whether or not the ImageWriter implementation associated with this * service provider can encode an image with the specified type. * * @param type * the ImageTypeSpecifier. * @return true, if an image with the specified type can be encoded, false * otherwise. */ public abstract boolean canEncodeImage(ImageTypeSpecifier type); /** * Checks whether or not the ImageWriter implementation associated with this * service provider can encode the specified RenderedImage. * * @param im * the RenderedImage. * @return true, if RenderedImage can be encoded, false otherwise. */ public boolean canEncodeImage(RenderedImage im) { return canEncodeImage(ImageTypeSpecifier.createFromRenderedImage(im)); } /** * Returns an instance of the ImageWriter implementation for this service * provider. * * @return the ImageWriter. * @throws IOException * if an I/O exception has occurred. */ public ImageWriter createWriterInstance() throws IOException { return createWriterInstance(null); } /** * Returns an instance of the ImageWriter implementation for this service * provider. * * @param extension * the a plug-in specific extension object, or null. * @return the ImageWriter. * @throws IOException * if an I/O exception has occurred. */ public abstract ImageWriter createWriterInstance(Object extension) throws IOException; /** * Checks whether or not the specified ImageWriter object is an instance of * the ImageWriter associated with this service provider or not. * * @param writer * the ImageWriter. * @return true, if the specified ImageWriter object is an instance of the * ImageWriter associated with this service provider, false * otherwise. */ public boolean isOwnWriter(ImageWriter writer) { throw new UnsupportedOperationException("Not supported yet"); } /** * Gets an array of strings with names of the ImageReaderSpi classes that * support the internal metadata representation used by the ImageWriter of * this service provider, or null if there are no such ImageReaders. * * @return the array of strings with names of the ImageWriterSpi classes. */ public String[] getImageReaderSpiNames() { return readerSpiNames; } }