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.
Writers should call clearAbortRequest
at the
beginning of each write operation, and poll the value of
abortRequested
regularly during the write.
IIOWriteProgressListener
to the list of
registered progress listeners. If listener
is
null
, no exception will be thrown and no action
will be taken.IIOWriteWarningListener
to the list of
registered warning listeners. If listener
is
null
, 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 current
Locale
. If no Locale
has been set,
warning messages may be localized as the writer sees fit.true
if 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
the replacePixels
methods. Existing images with
indices greater than or equal to the insertion index will have
their indices increased by 1. A value for
imageIndex
of -1
may 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 false
without performing bounds
checking on the index.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise returns false
without checking the value of imageIndex
.
true
if 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 for
imageIndex
of -1
may be used to
signify an index one larger than the current largest index.
A writer that does not support any image insertion may
return false
without performing bounds checking on
the index.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise returns false
withour checking the value of imageIndex
.
true
if 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 false
without performing bounds checking on
the index.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise returns false
without checking the value of imageIndex
.
true
if it is possible to replace the
image metadata associated with an existing image with index
imageIndex
. If this method returns
false
, a call to
replaceImageMetadata(imageIndex)
will throw an
UnsupportedOperationException
.
A writer that does not support any image metadata
replacement may return false
without performing
bounds checking on the index.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise returns false
without checking the value of imageIndex
.
true
if the writer allows pixels of the
given image to be replaced using the replacePixels
methods.
A writer that does not support any pixel replacement may
return false
without performing bounds checking on
the index.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise returns false
without checking the value of imageIndex
.
true
if it is possible to replace the
stream metadata already present in the output.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise returns false
.
true
if 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 the replacePixels
methods. If the output
is an ImageOutputStream
, its existing contents
prior to the current seek position are not affected, and need
not be readable or writable.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise returns false
.
true
if the methods that take an
IIOImage
parameter are capable of dealing with a
Raster
(as opposed to RenderedImage
)
source image. If this method returns false
, then
those methods will throw an
UnsupportedOperationException
if supplied with an
IIOImage
containing a Raster
.
The default implementation returns false
.
true
if the writer is able to append an
image to an image stream that already contains header
information and possibly prior images.
If canWriteSequence
returns false
,
writeToSequence
and endWriteSequence
will throw an UnsupportedOperationException
.
The default implementation returns false
.
IIOMetadata
object that may be used for
encoding and optionally modified using its document interfaces
or other interfaces specific to the writer plug-in that will be
used for encoding.
An optional ImageWriteParam
may be supplied
for cases where it may affect the structure of the image
metadata.
If the supplied ImageWriteParam
contains
optional setting values not understood by this writer or
transcoder, they will be ignored.
IIOMetadata
object that may be used for
encoding and optionally modified using its document interfaces
or other interfaces specific to the writer plug-in that will be
used for encoding.
An optional ImageWriteParam
may be supplied
for cases where it may affect the structure of the stream
metadata.
If the supplied ImageWriteParam
contains
optional setting values not understood by this writer or
transcoder, they will be ignored.
finalize
) 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.
prepareInsertEmpty
.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
replacePixels
.
If canReplacePixels
returns
false
, and
UnsupportedOperationException
will be thrown.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
prepareWriteEmpty
.
If canWriteEmpty()
returns false
,
an UnsupportedOperationException
will be thrown.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
prepareWriteSequence
. 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 an
ImageOutputStream
, data through the stream metadata
at the end of the sequence are flushed and need not be readable
or writable.
If canWriteSequence
returns false
,
this method will throw an
UnsupportedOperationException
.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
The equals
method implements an equivalence relation
on non-null object references:
x
, x.equals(x)
should return
true
.
x
and y
, x.equals(y)
should return true
if and only if
y.equals(x)
returns true
.
x
, y
, and z
, if
x.equals(y)
returns true
and
y.equals(z)
returns true
, then
x.equals(z)
should return true
.
x
and y
, multiple invocations of
x.equals(y) consistently return true
or consistently return false
, provided no
information used in equals
comparisons on the
objects is modified.
x
,
x.equals(null)
should return false
.
The equals method for class Object
implements
the most discriminating possible equivalence relation on objects;
that is, for any non-null reference values x
and
y
, this method returns true
if and only
if x
and y
refer to the same object
(x == y
has the value true
).
Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.
Locale
s that may be used to
localize warning listeners and compression settings. A return
value of null
indicates that localization is not
supported.
The default implementation returns a clone of the
availableLocales
instance variable if it is
non-null
, or else returns null
.
IIOMetadata
object 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 the IIOMetadata.getAsTree
method, an IIOMetadataController
object, or via
plug-in specific interfaces, and the resulting data supplied to
one of the write
methods that take a stream
metadata parameter.
An optional ImageWriteParam
may be supplied
for cases where it may affect the structure of the image
metadata.
If the supplied ImageWriteParam
contains
optional setting values not supported by this writer (e.g.
progressive encoding or any format-specific settings), they
will be ignored.
IIOMetadata
object 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 the IIOMetadata.getAsTree
method, an
IIOMetadataController
object, or via plug-in
specific interfaces, and the resulting data supplied to one of
the write
methods that take a stream metadata
parameter.
An optional ImageWriteParam
may be supplied
for cases where it may affect the structure of the stream
metadata.
If the supplied ImageWriteParam
contains
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
.
ImageWriteParam
object of the
appropriate type for this file format containing default
values, that is, those values that would be used
if no ImageWriteParam
object 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
ImageWriteParam
object that does not allow tiling,
progressive encoding, or compression, and that will be
localized for the current Locale
(i.e.,
what you would get by calling new
ImageWriteParam(getLocale())
.
Individual plug-ins may return an instance of
ImageWriteParam
with additional optional features
enabled, or they may return an instance of a plug-in specific
subclass of ImageWriteParam
.
Locale
, or
null
if none has been set.
The default implementation returns the value of the
locale
instance variable.
-1
indicates that
insufficient information is available.
An ImageWriteParam
may optionally be supplied
for cases where it may affect thumbnail handling.
If the supplied ImageWriteParam
contains
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.
ImageWriterSpi
object that created
this ImageWriter
, or null
if this
object was not created through the IIORegistry
.
The default implementation returns the value of the
originatingProvider
instance variable.
ImageOutputStream
or other
Object
set by the most recent call to the
setOutput
method. If no destination has been
set, null
is returned.
The default implementation returns the value of the
output
instance variable.
Dimension
s 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 null
indicates that the size is arbitrary or unknown.
An ImageWriteParam
may optionally be supplied
for cases where it may affect thumbnail handling.
If the supplied ImageWriteParam
contains
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
.
java.util.Hashtable
.
The general contract of hashCode
is:
hashCode
method on each of
the two objects must produce the same integer result.
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
wait
methods.
The awakened thread will not be able to proceed until the current thread relinquishes the lock on this object. The awakened thread will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened thread enjoys no reliable privilege or disadvantage in being the next thread to lock this object.
This method should only be called by a thread that is the owner of this object's monitor. A thread becomes the owner of the object's monitor in one of three ways:
synchronized
statement
that synchronizes on the object.
Class,
by executing a
synchronized static method of that class.
Only one thread at a time can own an object's monitor.
wait
methods.
The awakened threads will not be able to proceed until the current thread relinquishes the lock on this object. The awakened threads will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened threads enjoy no reliable privilege or disadvantage in being the next thread to lock this object.
This method should only be called by a thread that is the owner
of this object's monitor. See the notify
method for a
description of the ways in which a thread can become the owner of
a monitor.
imageIndex
are preserved, and their
indices are each increased by 1. A value for
imageIndex
of -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 an ImageOutputStream
,
the entirety of the stream must be both readable and writeable.
The image contents may be
supplied later using the replacePixels
method.
The insertion is not complete until a call to
endInsertEmpty
occurs. Calls to
prepareReplacePixels
, replacePixels
,
and endReplacePixels
may occur between calls to
prepareInsertEmpty
and
endInsertEmpty
. However, calls to
prepareInsertEmpty
cannot be nested, and calls to
prepareWriteEmpty
and
prepareInsertEmpty
may not be interspersed.
If canInsertEmpty(imageIndex)
returns
false
, an
UnsupportedOperationException
will be thrown.
An ImageWriteParam
may optionally be supplied
to control the writing process. If param
is
null
, a default write param will be used.
If the supplied ImageWriteParam
contains
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
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
replacePixels
methods. The affected pixel area
will be clipped against the supplied
If canReplacePixels
returns
false
, and
UnsupportedOperationException
will be thrown.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
replacePixels
methods. If the output is an ImageOutputStream
,
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
endWriteEmpty
occurs. Calls to
prepareReplacePixels
, replacePixels
,
and endReplacePixels
may occur between calls to
prepareWriteEmpty
and endWriteEmpty
.
However, calls to prepareWriteEmpty
cannot be
nested, and calls to prepareWriteEmpty
and
prepareInsertEmpty
may not be interspersed.
If canWriteEmpty
returns false
,
an UnsupportedOperationException
will be thrown.
An ImageWriteParam
may optionally be supplied
to control the writing process. If param
is
null
, a default write param will be used.
If the supplied ImageWriteParam
contains
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
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
writeToSequence
calls, using the provided stream
metadata object. The metadata will be written to the stream if
it should precede the image data. If the argument is null
,
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 that endWriteSequence
be 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 canWriteSequence
returns false
,
this method will throw an
UnsupportedOperationException
.
The output must have been set beforehand using either
the setOutput
method.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
IIOWriteProgressListener
objects.
The default implementation sets the
progressListeners
instance variable to
null
.
IIOWriteWarningListener
objects.
The default implementation sets the
warningListeners
and warningLocales
instance variables to null
.
IIOWriteProgressListener
from the list
of registered progress listeners. If the listener was not
previously registered, or if listener
is
null
, no exception will be thrown and no action
will be taken.IIOWriteWarningListener
from the list
of registered warning listeners. If the listener was not
previously registered, or if listener
is
null
, no exception will be thrown and no action
will be taken. If canRemoveImage(imageIndex)
returns false,
an UnsupportedOperationException
will be thrown.
The removal may or may not cause a reduction in the actual file size.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
If canReplaceImageMetadata(imageIndex)
returns
false
, an
UnsupportedOperationException
will be thrown.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
Raster
. The image
data must match, or be convertible to, the image layout of the
existing image.
An ImageWriteParam
may optionally be supplied
to control the writing process. If param
is
null
, a default write param will be used.
The destination region is specified in the
param
argument, and will be clipped to the image
boundaries and the region supplied to
prepareReplacePixels
. At least one pixel of the
source must not be clipped, or an exception is thrown.
If the supplied ImageWriteParam
contains
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 an
IllegalStateException
will be thrown.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
The destination region is specified in the
param
argument, and will be clipped to the image
boundaries and the region supplied to
prepareReplacePixels
. At least one pixel of the
source must not be clipped, or an exception is thrown.
An ImageWriteParam
may optionally be supplied
to control the writing process. If param
is
null
, a default write param will be used.
If the supplied ImageWriteParam
contains
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 an
IllegalStateException
will be thrown.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
ImageOutputStream
, 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 canReplaceStreamMetadata
returns
false
, an
UnsupportedOperationException
will be thrown.
The default implementation throws an
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
ImageWriter
to its initial state.
The default implementation calls
setOutput(null)
, setLocale(null)
,
removeAllIIOWriteWarningListeners()
,
removeAllIIOWriteProgressListeners()
, and
clearAbortRequest
.
Locale
of this
ImageWriter
to the given value. A value of
null
removes any previous setting, and indicates
that the writer should localize as it sees fit.
The default implementation checks locale
against the values returned by
getAvailableLocales
, and sets the
locale
instance variable if it is found. If
locale
is null
, the instance variable
is set to null
without any checking.
ImageOutputStream
or other Object
.
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. If output
is
null
, any currently set output will be removed.
If output
is an
ImageOutputStream
, calls to the
write
, writeToSequence
, and
prepareWriteEmpty
/endWriteEmpty
methods will preserve the existing contents of the stream.
Other write methods, such as writeInsert
,
replaceStreamMetadata
,
replaceImageMetadata
, replacePixels
,
prepareInsertEmpty
/endInsertEmpty
,
and endWriteSequence
, require the full contents
of the stream to be readable and writable, and may alter any
portion of the stream.
Use of a general Object
other than an
ImageOutputStream
is 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's getOutputTypes
method; most writers
will return a single-element array containing only
ImageOutputStream.class
to indicate that they
accept only an ImageOutputStream
.
The default implementation sets the output
instance variable to the value of output
after
checking output
against the set of classes
advertised by the originating provider, if there is one.
toString
method returns a string that
"textually represents" this object. The result should
be a concise but informative representation that is easy for a
person to read.
It is recommended that all subclasses override this method.
The toString
method for class Object
returns a string consisting of the name of the class of which the
object is an instance, the at-sign character `@
', and
the unsigned hexadecimal representation of the hash code of the
object. In other words, this method returns a string equal to the
value of:
getClass().getName() + '@' + Integer.toHexString(hashCode())
The current thread must own this object's monitor. The thread
releases ownership of this monitor and waits until another thread
notifies threads waiting on this object's monitor to wake up
either through a call to the notify
method or the
notifyAll
method. The thread then waits until it can
re-obtain ownership of the monitor and resumes execution.
As in the one argument version, interrupts and spurious wakeups are possible, and this method should always be used in a loop:
synchronized (obj) { while (<condition does not hold>) obj.wait(); ... // Perform action appropriate to condition }This method should only be called by a thread that is the owner of this object's monitor. See the
notify
method for a
description of the ways in which a thread can become the owner of
a monitor.The current thread must own this object's monitor.
This method causes the current thread (call it T) to place itself in the wait set for this object and then to relinquish any and all synchronization claims on this object. Thread T becomes disabled for thread scheduling purposes and lies dormant until one of four things happens:
A thread can also wake up without being notified, interrupted, or timing out, a so-called spurious wakeup. While this will rarely occur in practice, applications must guard against it by testing for the condition that should have caused the thread to be awakened, and continuing to wait if the condition is not satisfied. In other words, waits should always occur in loops, like this one:
synchronized (obj) { while (<condition does not hold>) obj.wait(timeout); ... // Perform action appropriate to condition }(For more information on this topic, see Section 3.2.3 in Doug Lea's "Concurrent Programming in Java (Second Edition)" (Addison-Wesley, 2000), or Item 50 in Joshua Bloch's "Effective Java Programming Language Guide" (Addison-Wesley, 2001).
If the current thread is interrupted by another thread while it is waiting, then an InterruptedException is thrown. This exception is not thrown until the lock status of this object has been restored as described above.
Note that the wait method, as it places the current thread into the wait set for this object, unlocks only this object; any other objects on which the current thread may be synchronized remain locked while the thread waits.
This method should only be called by a thread that is the owner
of this object's monitor. See the notify
method for a
description of the ways in which a thread can become the owner of
a monitor.
This method is similar to the wait
method of one
argument, but it allows finer control over the amount of time to
wait for a notification before giving up. The amount of real time,
measured in nanoseconds, is given by:
1000000*timeout+nanos
In all other respects, this method does the same thing as the method of one argument. In particular, wait(0, 0) means the same thing as wait(0).
The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until either of the following two conditions has occurred:
notify
method
or the notifyAll
method.
timeout
milliseconds plus nanos
nanoseconds arguments, has
elapsed.
The thread then waits until it can re-obtain ownership of the monitor and resumes execution.
As in the one argument version, interrupts and spurious wakeups are possible, and this method should always be used in a loop:
synchronized (obj) { while (<condition does not hold>) obj.wait(timeout, nanos); ... // Perform action appropriate to condition }This method should only be called by a thread that is the owner of this object's monitor. See the
notify
method for a
description of the ways in which a thread can become the owner of
a monitor.write(null, image, null)
.ImageOutputStream
, 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
setOutput
method.
Stream metadata may optionally be supplied; if it is
null
, default stream metadata will be used.
If canWriteRasters
returns true
,
the IIOImage
may contain a Raster
source. Otherwise, it must contain a
RenderedImage
source.
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 ImageWriteParam
may
optionally be supplied to control the writing process. If
param
is null
, a default write param
will be used.
If the supplied ImageWriteParam
contains
optional setting values not supported by this writer (e.g.
progressive encoding or any format-specific settings), they
will be ignored.
write(null, new IIOImage(image,
null, null), null)
.imageIndex
are
preserved, and their indices are each increased by 1. A value
for imageIndex
of -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 an ImageOutputStream
,
the entirety of the stream must be both readable and writeable.
If canInsertImage(imageIndex)
returns
false
, an
UnsupportedOperationException
will be thrown.
An ImageWriteParam
may optionally be supplied
to control the writing process. If param
is
null
, a default write param will be used.
If the supplied ImageWriteParam
contains
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
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.
ImageOutputStream
, 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 when
endWriteSequence
is called ( If canWriteSequence
returns false
,
this method will throw an
UnsupportedOperationException
.
The output must have been set beforehand using
the setOutput
method.
prepareWriteSequence
must have been called
beforehand, or an IllegalStateException
is thrown.
If canWriteRasters
returns true
,
the IIOImage
may contain a Raster
source. Otherwise, it must contain a
RenderedImage
source.
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 ImageWriteParam
may optionally be supplied
to control the writing process. If param
is
null
, a default write param will be used.
If the supplied ImageWriteParam
contains
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
IllegalStateException
if the output is
null
, and otherwise throws an
UnsupportedOperationException
.