An interface providing metadata transcoding capability.
Any image may be transcoded (written to a different format
than the one it was originally stored in) simply by performing
a read operation followed by a write operation. However, loss
of data may occur in this process due to format differences.
In general, the best results will be achieved when
format-specific metadata objects can be created to encapsulate as
much information about the image and its associated metadata as
possible, in terms that are understood by the specific
ImageWriter used to perform the encoding.
An ImageTranscoder may be used to convert the
IIOMetadata objects supplied by the
ImageReader (representing per-stream and per-image
metadata) into corresponding objects suitable for encoding by a
particular ImageWriter. In the case where the methods
of this interface are being called directly on an
ImageWriter, the output will be suitable for that
writer.
The internal details of converting an IIOMetadata
object into a writer-specific format will vary according to the
context of the operation. Typically, an ImageWriter
will inspect the incoming object to see if it implements additional
interfaces with which the writer is familiar. This might be the
case, for example, if the object was obtained by means of a read
operation on a reader plug-in written by the same vendor as the
writer. In this case, the writer may access the incoming object by
means of its plug-in specific interfaces. In this case, the
re-encoding may be close to lossless if the image file format is
kept constant. If the format is changing, the writer may still
attempt to preserve as much information as possible.
If the incoming object does not implement any additional
interfaces known to the writer, the writer has no choice but to
access it via the standard IIOMetadata interfaces such
as the tree view provided by IIOMetadata.getAsTree.
In this case, there is likely to be significant loss of
information.
An independent ImageTranscoder essentially takes
on the same role as the writer plug-in in the above examples. It
must be familiar with the private interfaces used by both the
reader and writer plug-ins, and manually instantiate an object that
will be usable by the writer. The resulting metadata objects may
be used by the writer directly.
No independent implementations of ImageTranscoder
are provided as part of the standard API. Instead, the intention
of this interface is to provide a way for implementations to be
created and discovered by applications as the need arises.
Any image may be transcoded (written to a different format than the one it was originally stored in) simply by performing a read operation followed by a write operation. However, loss of data may occur in this process due to format differences.
In general, the best results will be achieved when format-specific metadata objects can be created to encapsulate as much information about the image and its associated metadata as possible, in terms that are understood by the specific
ImageWriterused to perform the encoding.An
ImageTranscodermay be used to convert theIIOMetadataobjects supplied by theImageReader(representing per-stream and per-image metadata) into corresponding objects suitable for encoding by a particularImageWriter. In the case where the methods of this interface are being called directly on anImageWriter, the output will be suitable for that writer.The internal details of converting an
IIOMetadataobject into a writer-specific format will vary according to the context of the operation. Typically, anImageWriterwill inspect the incoming object to see if it implements additional interfaces with which the writer is familiar. This might be the case, for example, if the object was obtained by means of a read operation on a reader plug-in written by the same vendor as the writer. In this case, the writer may access the incoming object by means of its plug-in specific interfaces. In this case, the re-encoding may be close to lossless if the image file format is kept constant. If the format is changing, the writer may still attempt to preserve as much information as possible.If the incoming object does not implement any additional interfaces known to the writer, the writer has no choice but to access it via the standard
IIOMetadatainterfaces such as the tree view provided byIIOMetadata.getAsTree. In this case, there is likely to be significant loss of information.An independent
ImageTranscoderessentially takes on the same role as the writer plug-in in the above examples. It must be familiar with the private interfaces used by both the reader and writer plug-ins, and manually instantiate an object that will be usable by the writer. The resulting metadata objects may be used by the writer directly.No independent implementations of
ImageTranscoderare provided as part of the standard API. Instead, the intention of this interface is to provide a way for implementations to be created and discovered by applications as the need arises.