/* * 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. */ 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 plugin 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 Signals that 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 plugin specific extension object, or null. * * @return the ImageWriter. * * @throws IOException Signals that 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 an array of strings with names of the ImageWriterSpi * classes. */ public String[] getImageReaderSpiNames() { return readerSpiNames; } }