- All Implemented Interfaces:
ImageTranscoder
public abstract class ImageWriter extends Object implements ImageTranscoder
ImageWriter objects are normally instantiated by
the service provider class for the specific format. Service
provider classes are registered with the IIORegistry,
which uses them for format recognition and presentation of
available format readers and writers.
- See Also:
ImageReader,ImageWriteParam,IIORegistry,ImageWriterSpi
-
Field Summary
Fields Modifier and Type Field Description protected Locale[]availableLocalesAn array ofLocales that may be used to localize warning messages and compression setting values, ornullif localization is not supported.protected LocalelocaleThe currentLocaleto be used for localization, ornullif none has been set.protected ImageWriterSpioriginatingProviderTheImageWriterSpithat instantiated this object, ornullif its identity is not known or none exists.protected ObjectoutputTheImageOutputStreamor otherObjectset bysetOutputand retrieved bygetOutput.protected List<IIOWriteProgressListener>progressListenersAListof currently registeredIIOWriteProgressListeners, initialized by defaultnull, which is synonymous with an emptyList.protected List<IIOWriteWarningListener>warningListenersAListof currently registeredIIOWriteWarningListeners, initialized by default tonull, which is synonymous with an emptyList.protected List<Locale>warningLocalesAListofLocales, one for each element ofwarningListeners, initialized by defaultnull, which is synonymous with an emptyList. -
Constructor Summary
Constructors Modifier Constructor Description protectedImageWriter(ImageWriterSpi originatingProvider)Constructs anImageWriterand sets itsoriginatingProviderinstance variable to the supplied value. -
Method Summary
Modifier and Type Method Description voidabort()Requests that any current write operation be aborted.protected booleanabortRequested()Returnstrueif a request to abort the current write operation has been made since the writer was instantiated orclearAbortRequestwas called.voidaddIIOWriteProgressListener(IIOWriteProgressListener listener)Adds anIIOWriteProgressListenerto the list of registered progress listeners.voidaddIIOWriteWarningListener(IIOWriteWarningListener listener)Adds anIIOWriteWarningListenerto the list of registered warning listeners.booleancanInsertEmpty(int imageIndex)Returnstrueif the writer supports the insertion of a new, empty image at the given index.booleancanInsertImage(int imageIndex)Returnstrueif the writer supports the insertion of a new image at the given index.booleancanRemoveImage(int imageIndex)Returnstrueif the writer supports the removal of an existing image at the given index.booleancanReplaceImageMetadata(int imageIndex)Returnstrueif it is possible to replace the image metadata associated with an existing image with indeximageIndex.booleancanReplacePixels(int imageIndex)Returnstrueif the writer allows pixels of the given image to be replaced using thereplacePixelsmethods.booleancanReplaceStreamMetadata()Returnstrueif it is possible to replace the stream metadata already present in the output.booleancanWriteEmpty()Returnstrueif the writer supports the writing of a complete image stream consisting of a single image with undefined pixel values and associated metadata and thumbnails to the output.booleancanWriteRasters()Returnstrueif the methods that take anIIOImageparameter are capable of dealing with aRaster(as opposed toRenderedImage) source image.booleancanWriteSequence()Returnstrueif the writer is able to append an image to an image stream that already contains header information and possibly prior images.protected voidclearAbortRequest()Clears any previous abort request.voiddispose()Allows any resources held by this object to be released.voidendInsertEmpty()Completes the insertion of a new image that was begun with a prior call toprepareInsertEmpty.voidendReplacePixels()Terminates a sequence of calls toreplacePixels.voidendWriteEmpty()Completes the writing of a new image that was begun with a prior call toprepareWriteEmpty.voidendWriteSequence()Completes the writing of a sequence of images begun withprepareWriteSequence.Locale[]getAvailableLocales()Returns an array ofLocales that may be used to localize warning listeners and compression settings.abstract IIOMetadatagetDefaultImageMetadata(ImageTypeSpecifier imageType, ImageWriteParam param)Returns anIIOMetadataobject containing default values for encoding an image of the given type.abstract IIOMetadatagetDefaultStreamMetadata(ImageWriteParam param)Returns anIIOMetadataobject containing default values for encoding a stream of images.ImageWriteParamgetDefaultWriteParam()Returns a newImageWriteParamobject of the appropriate type for this file format containing default values, that is, those values that would be used if noImageWriteParamobject were specified.LocalegetLocale()Returns the currently setLocale, ornullif none has been set.intgetNumThumbnailsSupported(ImageTypeSpecifier imageType, ImageWriteParam param, IIOMetadata streamMetadata, IIOMetadata imageMetadata)Returns the number of thumbnails supported by the format being written, given the image type and any additional write parameters and metadata objects that will be used during encoding.ImageWriterSpigetOriginatingProvider()Returns theImageWriterSpiobject that created thisImageWriter, ornullif this object was not created through theIIORegistry.ObjectgetOutput()Returns theImageOutputStreamor otherObjectset by the most recent call to thesetOutputmethod.Dimension[]getPreferredThumbnailSizes(ImageTypeSpecifier imageType, ImageWriteParam param, IIOMetadata streamMetadata, IIOMetadata imageMetadata)Returns an array ofDimensions indicating the legal size ranges for thumbnail images as they will be encoded in the output file or stream.voidprepareInsertEmpty(int imageIndex, ImageTypeSpecifier imageType, int width, int height, IIOMetadata imageMetadata, List<? extends BufferedImage> thumbnails, ImageWriteParam param)Begins the insertion of a new image with undefined pixel values into an existing image stream.voidprepareReplacePixels(int imageIndex, Rectangle region)Prepares the writer to handle a series of calls to thereplacePixelsmethods.voidprepareWriteEmpty(IIOMetadata streamMetadata, ImageTypeSpecifier imageType, int width, int height, IIOMetadata imageMetadata, List<? extends BufferedImage> thumbnails, ImageWriteParam param)Begins the writing of a complete image stream, consisting of a single image with undefined pixel values and associated metadata and thumbnails, to the output.voidprepareWriteSequence(IIOMetadata streamMetadata)Prepares a stream to accept a series of subsequentwriteToSequencecalls, using the provided stream metadata object.protected voidprocessImageComplete()Broadcasts the completion of an image write to all registeredIIOWriteProgressListeners by calling theirimageCompletemethod.protected voidprocessImageProgress(float percentageDone)Broadcasts the current percentage of image completion to all registeredIIOWriteProgressListeners by calling theirimageProgressmethod.protected voidprocessImageStarted(int imageIndex)Broadcasts the start of an image write to all registeredIIOWriteProgressListeners by calling theirimageStartedmethod.protected voidprocessThumbnailComplete()Broadcasts the completion of a thumbnail write to all registeredIIOWriteProgressListeners by calling theirthumbnailCompletemethod.protected voidprocessThumbnailProgress(float percentageDone)Broadcasts the current percentage of thumbnail completion to all registeredIIOWriteProgressListeners by calling theirthumbnailProgressmethod.protected voidprocessThumbnailStarted(int imageIndex, int thumbnailIndex)Broadcasts the start of a thumbnail write to all registeredIIOWriteProgressListeners by calling theirthumbnailStartedmethod.protected voidprocessWarningOccurred(int imageIndex, String warning)Broadcasts a warning message to all registeredIIOWriteWarningListeners by calling theirwarningOccurredmethod.protected voidprocessWarningOccurred(int imageIndex, String baseName, String keyword)Broadcasts a localized warning message to all registeredIIOWriteWarningListeners by calling theirwarningOccurredmethod with a string taken from aResourceBundle.protected voidprocessWriteAborted()Broadcasts that the write has been aborted to all registeredIIOWriteProgressListeners by calling theirwriteAbortedmethod.voidremoveAllIIOWriteProgressListeners()Removes all currently registeredIIOWriteProgressListenerobjects.voidremoveAllIIOWriteWarningListeners()Removes all currently registeredIIOWriteWarningListenerobjects.voidremoveIIOWriteProgressListener(IIOWriteProgressListener listener)Removes anIIOWriteProgressListenerfrom the list of registered progress listeners.voidremoveIIOWriteWarningListener(IIOWriteWarningListener listener)Removes anIIOWriteWarningListenerfrom the list of registered warning listeners.voidremoveImage(int imageIndex)Removes an image from the stream.voidreplaceImageMetadata(int imageIndex, IIOMetadata imageMetadata)Replaces the image metadata associated with an existing image.voidreplacePixels(Raster raster, ImageWriteParam param)Replaces a portion of an image already present in the output with a portion of the givenRaster.voidreplacePixels(RenderedImage image, ImageWriteParam param)Replaces a portion of an image already present in the output with a portion of the given image.voidreplaceStreamMetadata(IIOMetadata streamMetadata)Replaces the stream metadata in the output with new information.voidreset()Restores theImageWriterto its initial state.voidsetLocale(Locale locale)Sets the currentLocaleof thisImageWriterto the given value.voidsetOutput(Object output)Sets the destination to the givenImageOutputStreamor otherObject.voidwrite(RenderedImage image)Appends a complete image stream consisting of a single image with default metadata and thumbnails to the output.voidwrite(IIOImage image)Appends a complete image stream containing a single image with default metadata and thumbnails to the output.abstract voidwrite(IIOMetadata streamMetadata, IIOImage image, ImageWriteParam param)Appends a complete image stream containing a single image and associated stream and image metadata and thumbnails to the output.voidwriteInsert(int imageIndex, IIOImage image, ImageWriteParam param)Inserts a new image into an existing image stream.voidwriteToSequence(IIOImage image, ImageWriteParam param)Appends a single image and possibly associated metadata and thumbnails, to the output.Methods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods declared in interface javax.imageio.ImageTranscoder
convertImageMetadata, convertStreamMetadata
-
Field Details
-
originatingProvider
TheImageWriterSpithat instantiated this object, ornullif its identity is not known or none exists. By default it is initialized tonull. -
output
TheImageOutputStreamor otherObjectset bysetOutputand retrieved bygetOutput. By default it is initialized tonull. -
availableLocales
An array ofLocales that may be used to localize warning messages and compression setting values, ornullif localization is not supported. By default it is initialized tonull. -
locale
The currentLocaleto be used for localization, ornullif none has been set. By default it is initialized tonull. -
warningListeners
AListof currently registeredIIOWriteWarningListeners, initialized by default tonull, which is synonymous with an emptyList. -
warningLocales
AListofLocales, one for each element ofwarningListeners, initialized by defaultnull, which is synonymous with an emptyList. -
progressListeners
AListof currently registeredIIOWriteProgressListeners, initialized by defaultnull, which is synonymous with an emptyList.
-
-
Constructor Details
-
ImageWriter
Constructs anImageWriterand sets itsoriginatingProviderinstance variable to the supplied value.Subclasses that make use of extensions should provide a constructor with signature
(ImageWriterSpi, Object)in order to retrieve the extension object. If the extension object is unsuitable, anIllegalArgumentExceptionshould be thrown.- Parameters:
originatingProvider- theImageWriterSpithat is constructing this object, ornull.
-
-
Method Details
-
getOriginatingProvider
Returns theImageWriterSpiobject that created thisImageWriter, ornullif this object was not created through theIIORegistry.The default implementation returns the value of the
originatingProviderinstance variable.- Returns:
- an
ImageWriterSpi, ornull. - See Also:
ImageWriterSpi
-
setOutput
Sets the destination to the givenImageOutputStreamor otherObject. The destination is assumed to be ready to accept data, and will not be closed at the end of each write. This allows distributed imaging applications to transmit a series of images over a single network connection. Ifoutputisnull, any currently set output will be removed.If
outputis anImageOutputStream, calls to thewrite,writeToSequence, andprepareWriteEmpty/endWriteEmptymethods will preserve the existing contents of the stream. Other write methods, such aswriteInsert,replaceStreamMetadata,replaceImageMetadata,replacePixels,prepareInsertEmpty/endInsertEmpty, andendWriteSequence, require the full contents of the stream to be readable and writable, and may alter any portion of the stream.Use of a general
Objectother than anImageOutputStreamis intended for writers that interact directly with an output device or imaging protocol. The set of legal classes is advertised by the writer's service provider'sgetOutputTypesmethod; most writers will return a single-element array containing onlyImageOutputStream.classto indicate that they accept only anImageOutputStream.The default implementation sets the
outputinstance variable to the value ofoutputafter checkingoutputagainst the set of classes advertised by the originating provider, if there is one.- Parameters:
output- theImageOutputStreamor otherObjectto use for future writing.- Throws:
IllegalArgumentException- ifoutputis not an instance of one of the classes returned by the originating service provider'sgetOutputTypesmethod.- See Also:
getOutput()
-
getOutput
Returns theImageOutputStreamor otherObjectset by the most recent call to thesetOutputmethod. If no destination has been set,nullis returned.The default implementation returns the value of the
outputinstance variable.- Returns:
- the
Objectthat was specified usingsetOutput, ornull. - See Also:
setOutput(java.lang.Object)
-
getAvailableLocales
Returns an array ofLocales that may be used to localize warning listeners and compression settings. A return value ofnullindicates that localization is not supported.The default implementation returns a clone of the
availableLocalesinstance variable if it is non-null, or else returnsnull.- Returns:
- an array of
Locales that may be used as arguments tosetLocale, ornull.
-
setLocale
Sets the currentLocaleof thisImageWriterto the given value. A value ofnullremoves any previous setting, and indicates that the writer should localize as it sees fit.The default implementation checks
localeagainst the values returned bygetAvailableLocales, and sets thelocaleinstance variable if it is found. Iflocaleisnull, the instance variable is set tonullwithout any checking.- Parameters:
locale- the desiredLocale, ornull.- Throws:
IllegalArgumentException- iflocaleis non-nullbut is not one of the values returned bygetAvailableLocales.- See Also:
getLocale()
-
getLocale
Returns the currently setLocale, ornullif none has been set.The default implementation returns the value of the
localeinstance variable.- Returns:
- the current
Locale, ornull. - See Also:
setLocale(java.util.Locale)
-
getDefaultWriteParam
Returns a newImageWriteParamobject of the appropriate type for this file format containing default values, that is, those values that would be used if noImageWriteParamobject were specified. This is useful as a starting point for tweaking just a few parameters and otherwise leaving the default settings alone.The default implementation constructs and returns a new
ImageWriteParamobject that does not allow tiling, progressive encoding, or compression, and that will be localized for the currentLocale(i.e., what you would get by callingnew ImageWriteParam(getLocale()).Individual plug-ins may return an instance of
ImageWriteParamwith additional optional features enabled, or they may return an instance of a plug-in specific subclass ofImageWriteParam.- Returns:
- a new
ImageWriteParamobject containing default values.
-
getDefaultStreamMetadata
Returns anIIOMetadataobject containing default values for encoding a stream of images. The contents of the object may be manipulated using either the XML tree structure returned by theIIOMetadata.getAsTreemethod, anIIOMetadataControllerobject, or via plug-in specific interfaces, and the resulting data supplied to one of thewritemethods that take a stream metadata parameter.An optional
ImageWriteParammay be supplied for cases where it may affect the structure of the stream metadata.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.Writers that do not make use of stream metadata (e.g., writers for single-image formats) should return
null.- Parameters:
param- anImageWriteParamthat will be used to encode the image, ornull.- Returns:
- an
IIOMetadataobject.
-
getDefaultImageMetadata
public abstract IIOMetadata getDefaultImageMetadata(ImageTypeSpecifier imageType, ImageWriteParam param)Returns anIIOMetadataobject containing default values for encoding an image of the given type. The contents of the object may be manipulated using either the XML tree structure returned by theIIOMetadata.getAsTreemethod, anIIOMetadataControllerobject, or via plug-in specific interfaces, and the resulting data supplied to one of thewritemethods that take a stream metadata parameter.An optional
ImageWriteParammay be supplied for cases where it may affect the structure of the image metadata.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.- Parameters:
imageType- anImageTypeSpecifierindicating the format of the image to be written later.param- anImageWriteParamthat will be used to encode the image, ornull.- Returns:
- an
IIOMetadataobject.
-
getNumThumbnailsSupported
public int getNumThumbnailsSupported(ImageTypeSpecifier imageType, ImageWriteParam param, IIOMetadata streamMetadata, IIOMetadata imageMetadata)Returns the number of thumbnails supported by the format being written, given the image type and any additional write parameters and metadata objects that will be used during encoding. A return value of-1indicates that insufficient information is available.An
ImageWriteParammay optionally be supplied for cases where it may affect thumbnail handling.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.The default implementation returns 0.
- Parameters:
imageType- anImageTypeSpecifierindicating the type of image to be written, ornull.param- theImageWriteParamthat will be used for writing, ornull.streamMetadata- anIIOMetadataobject that will be used for writing, ornull.imageMetadata- anIIOMetadataobject that will be used for writing, ornull.- Returns:
- the number of thumbnails that may be written given the
supplied parameters, or
-1if insufficient information is available.
-
getPreferredThumbnailSizes
public Dimension[] getPreferredThumbnailSizes(ImageTypeSpecifier imageType, ImageWriteParam param, IIOMetadata streamMetadata, IIOMetadata imageMetadata)Returns an array ofDimensions indicating the legal size ranges for thumbnail images as they will be encoded in the output file or stream. This information is merely advisory; the writer will resize any supplied thumbnails as necessary.The information is returned as a set of pairs; the first element of a pair contains an (inclusive) minimum width and height, and the second element contains an (inclusive) maximum width and height. Together, each pair defines a valid range of sizes. To specify a fixed size, the same width and height will appear for both elements. A return value of
nullindicates that the size is arbitrary or unknown.An
ImageWriteParammay optionally be supplied for cases where it may affect thumbnail handling.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.The default implementation returns
null.- Parameters:
imageType- anImageTypeSpecifierindicating the type of image to be written, ornull.param- theImageWriteParamthat will be used for writing, ornull.streamMetadata- anIIOMetadataobject that will be used for writing, ornull.imageMetadata- anIIOMetadataobject that will be used for writing, ornull.- Returns:
- an array of
Dimensions with an even length of at least two, ornull.
-
canWriteRasters
public boolean canWriteRasters()Returnstrueif the methods that take anIIOImageparameter are capable of dealing with aRaster(as opposed toRenderedImage) source image. If this method returnsfalse, then those methods will throw anUnsupportedOperationExceptionif supplied with anIIOImagecontaining aRaster.The default implementation returns
false.- Returns:
trueifRastersources are supported.
-
write
public abstract void write(IIOMetadata streamMetadata, IIOImage image, ImageWriteParam param) throws IOExceptionAppends a complete image stream containing a single image and associated stream and image metadata and thumbnails to the output. Any necessary header information is included. If the output is anImageOutputStream, its existing contents prior to the current seek position are not affected, and need not be readable or writable.The output must have been set beforehand using the
setOutputmethod.Stream metadata may optionally be supplied; if it is
null, default stream metadata will be used.If
canWriteRastersreturnstrue, theIIOImagemay contain aRastersource. Otherwise, it must contain aRenderedImagesource.The supplied thumbnails will be resized if needed, and any thumbnails in excess of the supported number will be ignored. If the format requires additional thumbnails that are not provided, the writer should generate them internally.
An
ImageWriteParammay optionally be supplied to control the writing process. Ifparamisnull, a default write param will be used.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.- Parameters:
streamMetadata- anIIOMetadataobject representing stream metadata, ornullto use default values.image- anIIOImageobject containing an image, thumbnails, and metadata to be written.param- anImageWriteParam, ornullto use a defaultImageWriteParam.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifimagecontains aRasterandcanWriteRastersreturnsfalse.IllegalArgumentException- ifimageisnull.IOException- if an error occurs during writing.
-
write
Appends a complete image stream containing a single image with default metadata and thumbnails to the output. This method is a shorthand forwrite(null, image, null).- Parameters:
image- anIIOImageobject containing an image, thumbnails, and metadata to be written.- Throws:
IllegalStateException- if the output has not been set.IllegalArgumentException- ifimageisnull.UnsupportedOperationException- ifimagecontains aRasterandcanWriteRastersreturnsfalse.IOException- if an error occurs during writing.
-
write
Appends a complete image stream consisting of a single image with default metadata and thumbnails to the output. This method is a shorthand forwrite(null, new IIOImage(image, null, null), null).- Parameters:
image- aRenderedImageto be written.- Throws:
IllegalStateException- if the output has not been set.IllegalArgumentException- ifimageisnull.IOException- if an error occurs during writing.
-
canWriteSequence
public boolean canWriteSequence()Returnstrueif the writer is able to append an image to an image stream that already contains header information and possibly prior images.If
canWriteSequencereturnsfalse,writeToSequenceandendWriteSequencewill throw anUnsupportedOperationException.The default implementation returns
false.- Returns:
trueif images may be appended sequentially.
-
prepareWriteSequence
Prepares a stream to accept a series of subsequentwriteToSequencecalls, using the provided stream metadata object. The metadata will be written to the stream if it should precede the image data. If the argument isnull, default stream metadata is used.If the output is an
ImageOutputStream, the existing contents of the output prior to the current seek position are flushed, and need not be readable or writable. If the format requires thatendWriteSequencebe able to rewind to patch up the header information, such as for a sequence of images in a single TIFF file, then the metadata written by this method must remain in a writable portion of the stream. Other formats may flush the stream after this method and after each image.If
canWriteSequencereturnsfalse, this method will throw anUnsupportedOperationException.The output must have been set beforehand using either the
setOutputmethod.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
streamMetadata- A stream metadata object, ornull.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanWriteSequencereturnsfalse.IOException- if an error occurs writing the stream metadata.
-
writeToSequence
Appends a single image and possibly associated metadata and thumbnails, to the output. If the output is anImageOutputStream, the existing contents of the output prior to the current seek position may be flushed, and need not be readable or writable, unless the plug-in needs to be able to patch up the header information whenendWriteSequenceis called (e.g. TIFF).If
canWriteSequencereturnsfalse, this method will throw anUnsupportedOperationException.The output must have been set beforehand using the
setOutputmethod.prepareWriteSequencemust have been called beforehand, or anIllegalStateExceptionis thrown.If
canWriteRastersreturnstrue, theIIOImagemay contain aRastersource. Otherwise, it must contain aRenderedImagesource.The supplied thumbnails will be resized if needed, and any thumbnails in excess of the supported number will be ignored. If the format requires additional thumbnails that are not provided, the writer will generate them internally.
An
ImageWriteParammay optionally be supplied to control the writing process. Ifparamisnull, a default write param will be used.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
image- anIIOImageobject containing an image, thumbnails, and metadata to be written.param- anImageWriteParam, ornullto use a defaultImageWriteParam.- Throws:
IllegalStateException- if the output has not been set, orprepareWriteSequencehas not been called.UnsupportedOperationException- ifcanWriteSequencereturnsfalse.IllegalArgumentException- ifimageisnull.UnsupportedOperationException- ifimagecontains aRasterandcanWriteRastersreturnsfalse.IOException- if an error occurs during writing.
-
endWriteSequence
Completes the writing of a sequence of images begun withprepareWriteSequence. Any stream metadata that should come at the end of the sequence of images is written out, and any header information at the beginning of the sequence is patched up if necessary. If the output is anImageOutputStream, data through the stream metadata at the end of the sequence are flushed and need not be readable or writable.If
canWriteSequencereturnsfalse, this method will throw anUnsupportedOperationException.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Throws:
IllegalStateException- if the output has not been set, orprepareWriteSequencehas not been called.UnsupportedOperationException- ifcanWriteSequencereturnsfalse.IOException- if an error occurs during writing.
-
canReplaceStreamMetadata
Returnstrueif it is possible to replace the stream metadata already present in the output.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise returnsfalse.- Returns:
trueif replacement of stream metadata is allowed.- Throws:
IllegalStateException- if the output has not been set.IOException- if an I/O error occurs during the query.
-
replaceStreamMetadata
Replaces the stream metadata in the output with new information. If the output is anImageOutputStream, the prior contents of the stream are examined and possibly edited to make room for the new data. All of the prior contents of the output must be available for reading and writing.If
canReplaceStreamMetadatareturnsfalse, anUnsupportedOperationExceptionwill be thrown.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
streamMetadata- anIIOMetadataobject representing stream metadata, ornullto use default values.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- if thecanReplaceStreamMetadatareturnsfalse. modes do not includeIOException- if an error occurs during writing.
-
canReplaceImageMetadata
Returnstrueif it is possible to replace the image metadata associated with an existing image with indeximageIndex. If this method returnsfalse, a call toreplaceImageMetadata(imageIndex)will throw anUnsupportedOperationException.A writer that does not support any image metadata replacement may return
falsewithout performing bounds checking on the index.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise returnsfalsewithout checking the value ofimageIndex.- Parameters:
imageIndex- the index of the image whose metadata is to be replaced.- Returns:
trueif the image metadata of the given image can be replaced.- Throws:
IllegalStateException- if the output has not been set.IndexOutOfBoundsException- if the writer supports image metadata replacement in general, butimageIndexis less than 0 or greater than the largest available index.IOException- if an I/O error occurs during the query.
-
replaceImageMetadata
Replaces the image metadata associated with an existing image.If
canReplaceImageMetadata(imageIndex)returnsfalse, anUnsupportedOperationExceptionwill be thrown.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
imageIndex- the index of the image whose metadata is to be replaced.imageMetadata- anIIOMetadataobject representing image metadata, ornull.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanReplaceImageMetadatareturnsfalse.IndexOutOfBoundsException- ifimageIndexis less than 0 or greater than the largest available index.IOException- if an error occurs during writing.
-
canInsertImage
Returnstrueif the writer supports the insertion of a new image at the given index. Existing images with indices greater than or equal to the insertion index will have their indices increased by 1. A value forimageIndexof-1may be used to signify an index one larger than the current largest index.A writer that does not support any image insertion may return
falsewithout performing bounds checking on the index.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise returnsfalsewithout checking the value ofimageIndex.- Parameters:
imageIndex- the index at which the image is to be inserted.- Returns:
trueif an image may be inserted at the given index.- Throws:
IllegalStateException- if the output has not been set.IndexOutOfBoundsException- if the writer supports image insertion in general, butimageIndexis less than -1 or greater than the largest available index.IOException- if an I/O error occurs during the query.
-
writeInsert
Inserts a new image into an existing image stream. Existing images with an index greater thanimageIndexare preserved, and their indices are each increased by 1. A value forimageIndexof -1 may be used to signify an index one larger than the previous largest index; that is, it will cause the image to be logically appended to the end of the sequence. If the output is anImageOutputStream, the entirety of the stream must be both readable and writeable.If
canInsertImage(imageIndex)returnsfalse, anUnsupportedOperationExceptionwill be thrown.An
ImageWriteParammay optionally be supplied to control the writing process. Ifparamisnull, a default write param will be used.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
imageIndex- the index at which to write the image.image- anIIOImageobject containing an image, thumbnails, and metadata to be written.param- anImageWriteParam, ornullto use a defaultImageWriteParam.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanInsertImage(imageIndex)returnsfalse.IllegalArgumentException- ifimageisnull.IndexOutOfBoundsException- ifimageIndexis less than -1 or greater than the largest available index.UnsupportedOperationException- ifimagecontains aRasterandcanWriteRastersreturnsfalse.IOException- if an error occurs during writing.
-
canRemoveImage
Returnstrueif the writer supports the removal of an existing image at the given index. Existing images with indices greater than the insertion index will have their indices decreased by 1.A writer that does not support any image removal may return
falsewithout performing bounds checking on the index.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise returnsfalsewithout checking the value ofimageIndex.- Parameters:
imageIndex- the index of the image to be removed.- Returns:
trueif it is possible to remove the given image.- Throws:
IllegalStateException- if the output has not been set.IndexOutOfBoundsException- if the writer supports image removal in general, butimageIndexis less than 0 or greater than the largest available index.IOException- if an I/O error occurs during the query.
-
removeImage
Removes an image from the stream.If
canRemoveImage(imageIndex)returns false, anUnsupportedOperationExceptionwill be thrown.The removal may or may not cause a reduction in the actual file size.
The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
imageIndex- the index of the image to be removed.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanRemoveImage(imageIndex)returnsfalse.IndexOutOfBoundsException- ifimageIndexis less than 0 or greater than the largest available index.IOException- if an I/O error occurs during the removal.
-
canWriteEmpty
Returnstrueif the writer supports the writing of a complete image stream consisting of a single image with undefined pixel values and associated metadata and thumbnails to the output. The pixel values may be defined by future calls to thereplacePixelsmethods. If the output is anImageOutputStream, its existing contents prior to the current seek position are not affected, and need not be readable or writable.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise returnsfalse.- Returns:
trueif the writing of complete image stream with contents to be defined later is supported.- Throws:
IllegalStateException- if the output has not been set.IOException- if an I/O error occurs during the query.
-
prepareWriteEmpty
public void prepareWriteEmpty(IIOMetadata streamMetadata, ImageTypeSpecifier imageType, int width, int height, IIOMetadata imageMetadata, List<? extends BufferedImage> thumbnails, ImageWriteParam param) throws IOExceptionBegins the writing of a complete image stream, consisting of a single image with undefined pixel values and associated metadata and thumbnails, to the output. The pixel values will be defined by future calls to thereplacePixelsmethods. If the output is anImageOutputStream, its existing contents prior to the current seek position are not affected, and need not be readable or writable.The writing is not complete until a call to
endWriteEmptyoccurs. Calls toprepareReplacePixels,replacePixels, andendReplacePixelsmay occur between calls toprepareWriteEmptyandendWriteEmpty. However, calls toprepareWriteEmptycannot be nested, and calls toprepareWriteEmptyandprepareInsertEmptymay not be interspersed.If
canWriteEmptyreturnsfalse, anUnsupportedOperationExceptionwill be thrown.An
ImageWriteParammay optionally be supplied to control the writing process. Ifparamisnull, a default write param will be used.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
streamMetadata- anIIOMetadataobject representing stream metadata, ornullto use default values.imageType- anImageTypeSpecifierdescribing the layout of the image.width- the width of the image.height- the height of the image.imageMetadata- anIIOMetadataobject representing image metadata, ornull.thumbnails- aListofBufferedImagethumbnails for this image, ornull.param- anImageWriteParam, ornullto use a defaultImageWriteParam.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanWriteEmptyreturnsfalse.IllegalStateException- if a previous call toprepareWriteEmptyhas been made without a corresponding call toendWriteEmpty.IllegalStateException- if a previous call toprepareInsertEmptyhas been made without a corresponding call toendInsertEmpty.IllegalArgumentException- ifimageTypeisnullorthumbnailscontainsnullreferences or objects other thanBufferedImages.IllegalArgumentException- if width or height are less than 1.IOException- if an I/O error occurs during writing.
-
endWriteEmpty
Completes the writing of a new image that was begun with a prior call toprepareWriteEmpty.If
canWriteEmpty()returnsfalse, anUnsupportedOperationExceptionwill be thrown.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanWriteEmpty(imageIndex)returnsfalse.IllegalStateException- if a previous call toprepareWriteEmptywithout a corresponding call toendWriteEmptyhas not been made.IllegalStateException- if a previous call toprepareInsertEmptywithout a corresponding call toendInsertEmptyhas been made.IllegalStateException- if a call toprepareReiplacePixelshas been made without a matching call toendReplacePixels.IOException- if an I/O error occurs during writing.
-
canInsertEmpty
Returnstrueif the writer supports the insertion of a new, empty image at the given index. The pixel values of the image are undefined, and may be specified in pieces using thereplacePixelsmethods. Existing images with indices greater than or equal to the insertion index will have their indices increased by 1. A value forimageIndexof-1may be used to signify an index one larger than the current largest index.A writer that does not support insertion of empty images may return
falsewithout performing bounds checking on the index.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise returnsfalsewithout checking the value ofimageIndex.- Parameters:
imageIndex- the index at which the image is to be inserted.- Returns:
trueif an empty image may be inserted at the given index.- Throws:
IllegalStateException- if the output has not been set.IndexOutOfBoundsException- if the writer supports empty image insertion in general, butimageIndexis less than -1 or greater than the largest available index.IOException- if an I/O error occurs during the query.
-
prepareInsertEmpty
public void prepareInsertEmpty(int imageIndex, ImageTypeSpecifier imageType, int width, int height, IIOMetadata imageMetadata, List<? extends BufferedImage> thumbnails, ImageWriteParam param) throws IOExceptionBegins the insertion of a new image with undefined pixel values into an existing image stream. Existing images with an index greater thanimageIndexare preserved, and their indices are each increased by 1. A value forimageIndexof -1 may be used to signify an index one larger than the previous largest index; that is, it will cause the image to be logically appended to the end of the sequence. If the output is anImageOutputStream, the entirety of the stream must be both readable and writeable.The image contents may be supplied later using the
replacePixelsmethod. The insertion is not complete until a call toendInsertEmptyoccurs. Calls toprepareReplacePixels,replacePixels, andendReplacePixelsmay occur between calls toprepareInsertEmptyandendInsertEmpty. However, calls toprepareInsertEmptycannot be nested, and calls toprepareWriteEmptyandprepareInsertEmptymay not be interspersed.If
canInsertEmpty(imageIndex)returnsfalse, anUnsupportedOperationExceptionwill be thrown.An
ImageWriteParammay optionally be supplied to control the writing process. Ifparamisnull, a default write param will be used.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
imageIndex- the index at which to write the image.imageType- anImageTypeSpecifierdescribing the layout of the image.width- the width of the image.height- the height of the image.imageMetadata- anIIOMetadataobject representing image metadata, ornull.thumbnails- aListofBufferedImagethumbnails for this image, ornull.param- anImageWriteParam, ornullto use a defaultImageWriteParam.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanInsertEmpty(imageIndex)returnsfalse.IndexOutOfBoundsException- ifimageIndexis less than -1 or greater than the largest available index.IllegalStateException- if a previous call toprepareInsertEmptyhas been made without a corresponding call toendInsertEmpty.IllegalStateException- if a previous call toprepareWriteEmptyhas been made without a corresponding call toendWriteEmpty.IllegalArgumentException- ifimageTypeisnullorthumbnailscontainsnullreferences or objects other thanBufferedImages.IllegalArgumentException- if width or height are less than 1.IOException- if an I/O error occurs during writing.
-
endInsertEmpty
Completes the insertion of a new image that was begun with a prior call toprepareInsertEmpty.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanInsertEmpty(imageIndex)returnsfalse.IllegalStateException- if a previous call toprepareInsertEmptywithout a corresponding call toendInsertEmptyhas not been made.IllegalStateException- if a previous call toprepareWriteEmptywithout a corresponding call toendWriteEmptyhas been made.IllegalStateException- if a call toprepareReplacePixelshas been made without a matching call toendReplacePixels.IOException- if an I/O error occurs during writing.
-
canReplacePixels
Returnstrueif the writer allows pixels of the given image to be replaced using thereplacePixelsmethods.A writer that does not support any pixel replacement may return
falsewithout performing bounds checking on the index.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise returnsfalsewithout checking the value ofimageIndex.- Parameters:
imageIndex- the index of the image whose pixels are to be replaced.- Returns:
trueif the pixels of the given image can be replaced.- Throws:
IllegalStateException- if the output has not been set.IndexOutOfBoundsException- if the writer supports pixel replacement in general, butimageIndexis less than 0 or greater than the largest available index.IOException- if an I/O error occurs during the query.
-
prepareReplacePixels
Prepares the writer to handle a series of calls to thereplacePixelsmethods. The affected pixel area will be clipped against the suppliedIf
canReplacePixelsreturnsfalse, andUnsupportedOperationExceptionwill be thrown.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
imageIndex- the index of the image whose pixels are to be replaced.region- aRectanglethat will be used to clip future pixel regions.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanReplacePixels(imageIndex)returnsfalse.IndexOutOfBoundsException- ifimageIndexis less than 0 or greater than the largest available index.IllegalStateException- if there is a previous call toprepareReplacePixelswithout a matching call toendReplacePixels(i.e., nesting is not allowed).IllegalArgumentException- ifregionisnullor has a width or height less than 1.IOException- if an I/O error occurs during the preparation.
-
replacePixels
Replaces a portion of an image already present in the output with a portion of the given image. The image data must match, or be convertible to, the image layout of the existing image.The destination region is specified in the
paramargument, and will be clipped to the image boundaries and the region supplied toprepareReplacePixels. At least one pixel of the source must not be clipped, or an exception is thrown.An
ImageWriteParammay optionally be supplied to control the writing process. Ifparamisnull, a default write param will be used.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.This method may only be called after a call to
prepareReplacePixels, or else anIllegalStateExceptionwill be thrown.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
image- aRenderedImagecontaining source pixels.param- anImageWriteParam, ornullto use a defaultImageWriteParam.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanReplacePixels(imageIndex)returnsfalse.IllegalStateException- if there is no previous call toprepareReplacePixelswithout a matching call toendReplacePixels.IllegalArgumentException- if any of the following are true:-
imageisnull. - the intersected region does not contain at least one pixel.
- the layout of
imagedoes not match, or this writer cannot convert it to, the existing image layout.
-
IOException- if an I/O error occurs during writing.
-
replacePixels
Replaces a portion of an image already present in the output with a portion of the givenRaster. The image data must match, or be convertible to, the image layout of the existing image.An
ImageWriteParammay optionally be supplied to control the writing process. Ifparamisnull, a default write param will be used.The destination region is specified in the
paramargument, and will be clipped to the image boundaries and the region supplied toprepareReplacePixels. At least one pixel of the source must not be clipped, or an exception is thrown.If the supplied
ImageWriteParamcontains optional setting values not supported by this writer (e.g. progressive encoding or any format-specific settings), they will be ignored.This method may only be called after a call to
prepareReplacePixels, or else anIllegalStateExceptionwill be thrown.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Parameters:
raster- aRastercontaining source pixels.param- anImageWriteParam, ornullto use a defaultImageWriteParam.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanReplacePixels(imageIndex)returnsfalse.IllegalStateException- if there is no previous call toprepareReplacePixelswithout a matching call toendReplacePixels.UnsupportedOperationException- ifcanWriteRastersreturnsfalse.IllegalArgumentException- if any of the following are true:-
rasterisnull. - the intersected region does not contain at least one pixel.
- the layout of
rasterdoes not match, or this writer cannot convert it to, the existing image layout.
-
IOException- if an I/O error occurs during writing.
-
endReplacePixels
Terminates a sequence of calls toreplacePixels.If
canReplacePixelsreturnsfalse, andUnsupportedOperationExceptionwill be thrown.The default implementation throws an
IllegalStateExceptionif the output isnull, and otherwise throws anUnsupportedOperationException.- Throws:
IllegalStateException- if the output has not been set.UnsupportedOperationException- ifcanReplacePixels(imageIndex)returnsfalse.IllegalStateException- if there is no previous call toprepareReplacePixelswithout a matching call toendReplacePixels.IOException- if an I/O error occurs during writing.
-
abort
public void abort()Requests that any current write operation be aborted. The contents of the output following the abort will be undefined.Writers should call
clearAbortRequestat the beginning of each write operation, and poll the value ofabortRequestedregularly during the write. -
abortRequested
protected boolean abortRequested()Returnstrueif a request to abort the current write operation has been made since the writer was instantiated orclearAbortRequestwas called.- Returns:
trueif the current write operation should be aborted.- See Also:
abort(),clearAbortRequest()
-
clearAbortRequest
protected void clearAbortRequest()Clears any previous abort request. After this method has been called,abortRequestedwill returnfalse.- See Also:
abort(),abortRequested()
-
addIIOWriteWarningListener
Adds anIIOWriteWarningListenerto the list of registered warning listeners. Iflistenerisnull, no exception will be thrown and no action will be taken. Messages sent to the given listener will be localized, if possible, to match the currentLocale. If noLocalehas been set, warning messages may be localized as the writer sees fit.- Parameters:
listener- anIIOWriteWarningListenerto be registered.- See Also:
removeIIOWriteWarningListener(javax.imageio.event.IIOWriteWarningListener)
-
removeIIOWriteWarningListener
Removes anIIOWriteWarningListenerfrom the list of registered warning listeners. If the listener was not previously registered, or iflistenerisnull, no exception will be thrown and no action will be taken.- Parameters:
listener- anIIOWriteWarningListenerto be deregistered.- See Also:
addIIOWriteWarningListener(javax.imageio.event.IIOWriteWarningListener)
-
removeAllIIOWriteWarningListeners
public void removeAllIIOWriteWarningListeners()Removes all currently registeredIIOWriteWarningListenerobjects.The default implementation sets the
warningListenersandwarningLocalesinstance variables tonull. -
addIIOWriteProgressListener
Adds anIIOWriteProgressListenerto the list of registered progress listeners. Iflistenerisnull, no exception will be thrown and no action will be taken.- Parameters:
listener- anIIOWriteProgressListenerto be registered.- See Also:
removeIIOWriteProgressListener(javax.imageio.event.IIOWriteProgressListener)
-
removeIIOWriteProgressListener
Removes anIIOWriteProgressListenerfrom the list of registered progress listeners. If the listener was not previously registered, or iflistenerisnull, no exception will be thrown and no action will be taken.- Parameters:
listener- anIIOWriteProgressListenerto be deregistered.- See Also:
addIIOWriteProgressListener(javax.imageio.event.IIOWriteProgressListener)
-
removeAllIIOWriteProgressListeners
public void removeAllIIOWriteProgressListeners()Removes all currently registeredIIOWriteProgressListenerobjects.The default implementation sets the
progressListenersinstance variable tonull. -
processImageStarted
protected void processImageStarted(int imageIndex)Broadcasts the start of an image write to all registeredIIOWriteProgressListeners by calling theirimageStartedmethod. Subclasses may use this method as a convenience.- Parameters:
imageIndex- the index of the image about to be written.
-
processImageProgress
protected void processImageProgress(float percentageDone)Broadcasts the current percentage of image completion to all registeredIIOWriteProgressListeners by calling theirimageProgressmethod. Subclasses may use this method as a convenience.- Parameters:
percentageDone- the current percentage of completion, as afloat.
-
processImageComplete
protected void processImageComplete()Broadcasts the completion of an image write to all registeredIIOWriteProgressListeners by calling theirimageCompletemethod. Subclasses may use this method as a convenience. -
processThumbnailStarted
protected void processThumbnailStarted(int imageIndex, int thumbnailIndex)Broadcasts the start of a thumbnail write to all registeredIIOWriteProgressListeners by calling theirthumbnailStartedmethod. Subclasses may use this method as a convenience.- Parameters:
imageIndex- the index of the image associated with the thumbnail.thumbnailIndex- the index of the thumbnail.
-
processThumbnailProgress
protected void processThumbnailProgress(float percentageDone)Broadcasts the current percentage of thumbnail completion to all registeredIIOWriteProgressListeners by calling theirthumbnailProgressmethod. Subclasses may use this method as a convenience.- Parameters:
percentageDone- the current percentage of completion, as afloat.
-
processThumbnailComplete
protected void processThumbnailComplete()Broadcasts the completion of a thumbnail write to all registeredIIOWriteProgressListeners by calling theirthumbnailCompletemethod. Subclasses may use this method as a convenience. -
processWriteAborted
protected void processWriteAborted()Broadcasts that the write has been aborted to all registeredIIOWriteProgressListeners by calling theirwriteAbortedmethod. Subclasses may use this method as a convenience. -
processWarningOccurred
Broadcasts a warning message to all registeredIIOWriteWarningListeners by calling theirwarningOccurredmethod. Subclasses may use this method as a convenience.- Parameters:
imageIndex- the index of the image on which the warning occurred.warning- the warning message.- Throws:
IllegalArgumentException- ifwarningisnull.
-
processWarningOccurred
Broadcasts a localized warning message to all registeredIIOWriteWarningListeners by calling theirwarningOccurredmethod with a string taken from aResourceBundle. Subclasses may use this method as a convenience.- Parameters:
imageIndex- the index of the image on which the warning occurred.baseName- the base name of a set ofResourceBundles containing localized warning messages.keyword- the keyword used to index the warning message within the set ofResourceBundles.- Throws:
IllegalArgumentException- ifbaseNameisnull.IllegalArgumentException- ifkeywordisnull.IllegalArgumentException- if no appropriateResourceBundlemay be located.IllegalArgumentException- if the named resource is not found in the locatedResourceBundle.IllegalArgumentException- if the object retrieved from theResourceBundleis not aString.
-
reset
public void reset()Restores theImageWriterto its initial state.The default implementation calls
setOutput(null),setLocale(null),removeAllIIOWriteWarningListeners(),removeAllIIOWriteProgressListeners(), andclearAbortRequest. -
dispose
public void dispose()Allows any resources held by this object to be released. The result of calling any other method (other thanfinalize) subsequent to a call to this method is undefined.It is important for applications to call this method when they know they will no longer be using this
ImageWriter. Otherwise, the writer may continue to hold on to resources indefinitely.The default implementation of this method in the superclass does nothing. Subclass implementations should ensure that all resources, especially native resources, are released.
-