|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Object
|
+--javax.media.jai.PlanarImage
|
+--javax.media.jai.OpImage
This is the base class for all image operations. It provides a home
for information and functionalities common to all the op-image classes,
and implements various utility methods that may be useful to a specific
operation. Image operations may be divided into different categories
based on their characteristics. A subclass, extending
OpImage, represents a category and implements methods
unique and common to those operations. Each individual operator
should extend the subclass that represents the specific
category that operator belongs to.
The layout variables of an OpImage is inherited from the
PlanarImage superclass. The layout should be set when the
OpImage is constructed. Each subclass must set
the appropriate layout variables and supply them via the
ImageLayout argument at construction time. This class
simply modifies these settings as described in the OpImage
constructor comments before forwarding the layout to the
PlanarImage constructor. If a subclass needs to modify
any of the layout settings subsequent to invoking its superclass
constructors it should use the setImageLayout() method
defined in PlanarImage in preference to setting the
layout variables directly.
A RenderedImage's pixel data type and number of bands
are defined by its SampleModel, while the
ColorModel translates the pixel data into color/alpha
components in the specific ColorSpace that is associated
with the ColorModel.
By default, the operators provided by Java Advanced Imaging (JAI)
operate on the image's pixel data only. That is, the computations
are performed on the data described by the image's
SampleModel. No color translation is performed prior
to the actual computation by the operator, regardless of the type of
the ColorModel an image has. If a user intends to have
an operation performed on the color data, he must perform the
color translation explicitly prior to invoking the operation.
There are those operators that specifically deal with the
color/alpha data of an image. Such an operator must state its
behavior in its OperationDescriptor explicitly and
explain its intended usage of the image's color/alpha component data.
In such cases, the image's ColorModel as well as the
associated ColorSpace should be considered.
The tile cache and scheduler are handled by this class. JAI
provides a default implementation for TileCache and
TileScheduler. However, they may be overriden by
each application. An OpImage may share a common cache
with other OpImages, or it may have a private cache of
its own. To override an existing cache, use the
setTileCache method; an input argument of null
indicates that this image should not have a tile cache.
The getTile method may be used to request a tile
of the image. The default implementation of this method in this
class first checks whether the requested tile is in the tile cache,
and if not, uses the default TileScheduler to schedule
the tile for computation. Once the tile has been computed, it is
added to the cache and returned as a Raster.
The JAI tile scheduler assumes that when a request is made to
schedule a tile for computation via the scheduleTile
method, that tile is not currently in the cache. To avoid a cycle,
it calls OpImage.computeTile for the actual tile
computation.
The default implementation of the computeTile method
in this class first creates a new Raster to represent
the requested tile, then calls one of the two computeRect
methods to compute the actual pixel values and store the result in
the DataBuffer of the Raster.
Two variants of the computeRect method exist.
The first (with input arguments Raster[],
WritableRaster, and Rectangle) is used when
the OpImage is constructed with the
cobbleSources argument set to true.
This indicates that the source data must be cobbled into a single
Raster and that all the necessary source data are provided
in order to compute the rectangular region of the destination image.
The source Raster array contains one entry for each
source image.
The second (with input arguments PlanarImage[],
WritableRaster, and Rectangle) is used when
the OpImage is constructed with the
cobbleSources argument set to false.
This indicates that the source data are not cobbled into a single
Raster; instead an array of PlanarImages,
one for each source, supply the source data and each image is
responsible for performing its own data accesses. This variant is
generally useful if iterators are to be used for the underlying
implementation of accessing the image data.
The two computeRect methods are not abstract because
normally only one needs to be implemented by the subclass depending on
the cobbleSources value. The default implementation of
these two methods in this class throws a RuntimeException.
Every operator who follows the above default implementation must
supply an overridden version of at least one of the
computeRect method variants, and specify which one is
to be called via the cobbleSources argument of the
constructor, or an exception will be thrown at run time.
If a subclass overrides getTile not to call
computeTile, does not use the JAI implementation of
TileScheduler, overrides computeTile not to
call computeRect, or does not follow the above default
implementation in any way, then it may need to handle issues such as
tile caching, multi-threading, and etc. by itself and may not need to
override some of the methods described above. In some cases, some of
the methods or variables are even irrelevant. However, subclasses
should be careful when not following the default path for computing
a tile. Most importantly, when a subclass overrides
getTile, it should also override computeTile.
To request multiple tiles at a time, it is preferable to
call the getTiles method with a complete list of the
requested tiles' indices, than to call getTile once
per tile. The implementation of getTiles in this class
is optimized using multi-threading so that multiple tiles are
computed simultaneously.
PlanarImage,
AreaOpImage,
GeometricOpImage,
PointOpImage,
StatisticsOpImage,
SourcelessOpImage| Field Summary | |
protected TileCache |
cache
The cache object used to cache this image's tiles. |
protected boolean |
cobbleSources
Indicates which one of the two computeRect variants
should be called by the computeTile method. |
static int |
OP_COMPUTE_BOUND
A constant indicating that an operation is likely to spend its time mainly performing computation. |
static int |
OP_IO_BOUND
A constant indicating that an operation is likely to spend its time mainly performing local I/O. |
static int |
OP_NETWORK_BOUND
A constant indicating that an operation is likely to spend its time mainly performing network I/O. |
protected Object |
tileCacheMetric
Metric used to produce an ordered list of tiles. |
| Fields inherited from class javax.media.jai.PlanarImage |
colorModel,
eventManager,
height,
minX,
minY,
properties,
sampleModel,
tileGridXOffset,
tileGridYOffset,
tileHeight,
tileWidth,
width |
| Constructor Summary | |
OpImage(Vector sources,
ImageLayout layout,
Map configuration,
boolean cobbleSources)
Constructor. |
|
| Method Summary | |
protected void |
addTileToCache(int tileX,
int tileY,
Raster tile)
Adds a tile to the tile cache. |
void |
cancelTiles(TileRequest request,
Point[] tileIndices)
Issue an advisory cancellation request to nullify processing of the indicated tiles via the TileScheduler for this image. |
protected void |
computeRect(PlanarImage[] sources,
WritableRaster dest,
Rectangle destRect)
Computes a rectangle of output, given PlanarImage
sources. |
protected void |
computeRect(Raster[] sources,
WritableRaster dest,
Rectangle destRect)
Computes a rectangle of output, given Raster
sources. |
boolean |
computesUniqueTiles()
Returns true if the OpImage returns an
unique Raster object every time computeTile
is called. |
Raster |
computeTile(int tileX,
int tileY)
Computes the image data of a tile. |
protected void |
finalize()
Uncaches all the tiles when this image is garbage collected. |
static int |
getExpandedNumBands(SampleModel sampleModel,
ColorModel colorModel)
Deprecated. as of JAI 1.1. |
protected RasterFormatTag[] |
getFormatTags()
Returns the image's format tags to be used with a RasterAccessor. |
int |
getOperationComputeType()
Returns one of OP_COMPUTE_BOUND,
OP_IO_BOUND, or OP_NETWORK_BOUND to
indicate how the operation is likely to spend its time. |
Raster |
getTile(int tileX,
int tileY)
Returns a tile of this image as a Raster. |
TileCache |
getTileCache()
Returns the tile cache object of this image by reference. |
Object |
getTileCacheMetric()
Returns the tileCacheMetric instance variable by reference. |
Point[] |
getTileDependencies(int tileX,
int tileY,
int sourceIndex)
Returns a list of indices of the tiles of a given source image that may be required in order to compute a given tile. |
protected Raster |
getTileFromCache(int tileX,
int tileY)
Retrieves a tile from the tile cache. |
Raster[] |
getTiles(Point[] tileIndices)
Computes the tiles indicated by the given tile indices. |
boolean |
hasExtender(int sourceIndex)
Deprecated. as of JAI 1.1. |
abstract Rectangle |
mapDestRect(Rectangle destRect,
int sourceIndex)
Returns a conservative estimate of the region of a specified source that is required in order to compute the pixels of a given destination rectangle. |
abstract Rectangle |
mapSourceRect(Rectangle sourceRect,
int sourceIndex)
Returns a conservative estimate of the destination region that can potentially be affected by the pixels of a rectangle of a given source. |
void |
prefetchTiles(Point[] tileIndices)
Hints that the given tiles might be needed in the near future. |
TileRequest |
queueTiles(Point[] tileIndices)
Queues a list of tiles for computation. |
void |
setTileCache(TileCache cache)
Sets the tile cache object of this image. |
protected static Vector |
vectorize(RenderedImage image)
Stores a RenderedImage in a Vector. |
protected static Vector |
vectorize(RenderedImage image1,
RenderedImage image2)
Stores two RenderedImages in a Vector. |
protected static Vector |
vectorize(RenderedImage image1,
RenderedImage image2,
RenderedImage image3)
Stores three RenderedImages in a Vector. |
| Methods inherited from class java.lang.Object |
clone,
equals,
getClass,
hashCode,
notify,
notifyAll,
wait,
wait,
wait |
| Field Detail |
public static final int OP_COMPUTE_BOUND
public static final int OP_IO_BOUND
public static final int OP_NETWORK_BOUND
protected transient TileCache cache
OpImages or a private
cache for this image only. If it is null, it
indicates that this image does not have a tile cache.protected Object tileCacheMetric
protected boolean cobbleSources
computeRect variants
should be called by the computeTile method. If it
is true, computeRect expects
contiguous sources.| Constructor Detail |
public OpImage(Vector sources,
ImageLayout layout,
Map configuration,
boolean cobbleSources)
The image's layout is encapsulated in the layout
argument. The variables of the image layout which are not set in
the layout parameter are copied from the first source
if sources are available. In the case of the ColorModel,
the copy is performed if and only if the ColorModel is
compatible with the destination SampleModel.
If either of the tile dimensions are not set in the layout
parameter and there is a global default tile setting
(JAI.getDefaultTileSize() returns non-null)
then reset each tile dimension independently if the image would be
untiled in that dimension with size at least double that of the
respective tile dimension.
The sources contains a list of immediate sources
of this image. Elements in the list may not be null.
If this image has no sources this argument should be null.
This parameter is forwarded unmodified to the PlanarImage
constructor.
The configuration contains a mapping of configuration
variables and image properties. Entries which have keys of type
RenderingHints.Key are taken to be configuration variables.
Entries with a key which is either a String or a
CaselessStringKey are interpreted as image properties.
This parameter is forwarded unmodified to the PlanarImage
constructor.
This image class recognizes the configuration variables referenced by the following keys:
JAI.KEY_TILE_CACHE: specifies the
TileCache in which to store the image tiles;
if this key is not supplied no tile caching will be performed.
JAI.KEY_TILE_CACHE_METRIC: establishes an
ordering of tiles stored in the tile cache. This ordering
is used to determine which tiles will be removed first, if
a condition causes tiles to be removed from the cache.
JAI.KEY_TILE_SCHEDULER: specifies the
TileScheduler to use to schedule tile computation;
if this key is not supplied the default scheduler will be used.
JAI.KEY_DEFAULT_COLOR_MODEL_ENABLED: specifies whether
a default ColorModel will be derived
if none is specified and one cannot be inherited from the first source;
if this key is not supplied a default ColorModel will be
computed if necessary.
JAI.KEY_DEFAULT_COLOR_MODEL_METHOD: specifies the
method to be used to compute the default ColorModel;
if this key is not supplied and a default ColorModel is
required, PlanarImage.createColorModel() will be used to
compute it.
The cobbleSources indicates which one of the two
variants of the computeRect method should be called.
If a subclass does not follow the default tile computation scheme,
then this argument may be irrelevant.
layout - The layout of this image.sources - The immediate sources of this image.configuration - Configurable attributes of the image including
configuration variables indexed by
RenderingHints.Keys and image properties indexed
by Strings or CaselessStringKeys.
This parameter may be null.cobbleSources - Indicates which variant of the
computeRect method should be called.sources
is non-null and any object in
sources is null.ColorModel setting
is enabled via a hint in the configuration Map
and the supplied Method does not conform to the
requirements stated in the JAI class for the
hint key KEY_DEFAULT_COLOR_MODEL_METHOD.| Method Detail |
protected static Vector vectorize(RenderedImage image)
RenderedImage in a Vector.image - The image to be stored in the Vector.Vector containing the image.image is
null.
protected static Vector vectorize(RenderedImage image1,
RenderedImage image2)
RenderedImages in a Vector.image1 - The first image to be stored in the Vector.image2 - The second image to be stored in the Vector.Vector containing the images.image1 or
image2 is null.
protected static Vector vectorize(RenderedImage image1,
RenderedImage image2,
RenderedImage image3)
RenderedImages in a Vector.image1 - The first image to be stored in the Vector.image2 - The second image to be stored in the Vector.image3 - The third image to be stored in the Vector.Vector containing the images.image1 or
image2 or image3 is null.public TileCache getTileCache()
null.public void setTileCache(TileCache cache)
null
input indicates that this image should have no tile cache and
subsequently computed tiles will not be cached.
The existing cache object is informed to release all the currently cached tiles of this image.
cache - A cache object to be used for caching this image's
tiles, or null if no tile caching is desired.
protected Raster getTileFromCache(int tileX,
int tileY)
null.tileX - The X index of the tile.tileY - The Y index of the tile.Raster or
null.
protected void addTileToCache(int tileX,
int tileY,
Raster tile)
tileX - The X index of the tile.tileY - The Y index of the tile.tile - The tile to be added to the cache.public Object getTileCacheMetric()
tileCacheMetric instance variable by reference.
public Raster getTile(int tileX,
int tileY)
Raster. If the
requested tile is completely outside of this image's bounds,
this method returns null.
This method attempts to retrieve the requested tile from the cache. If the tile is not currently in the cache, it schedules the tile for computation and adds it to the cache once the tile has been computed.
If a subclass overrides this method, then it needs to handle
tile caching and scheduling. It should also override
computeTile() which may be invoked directly by the
TileScheduler.
tileX - The X index of the tile.tileY - The Y index of the tile.
public Raster computeTile(int tileX,
int tileY)
When a tile is requested via the getTile method
and that tile is not in this image's tile cache, this method is
invoked by the TileScheduler to compute the data of
the new tile. Even though this method is marked public,
it should not be called by the applications directly. Rather, it
is meant to be called by the TileScheduler for the
actual computation.
The implementation of this method in this class assumes that
the requested tile either intersects the image, or is within the
image's bounds. It creates a new Raster to
represent the requested tile, then calls one of the two variants
of computeRect to calculate the pixels of the
tile that are within the image's bounds. The value of
cobbleSources determines which variant of
computeRect is invoked, as described in the class
comments.
Subclasses may provide a more optimized implementation of this
method. If they override this method not to call either variant of
computeRect, then neither variant of
computeRect needs to be implemented.
tileX - The X index of the tile.tileY - The Y index of the tile.
protected void computeRect(Raster[] sources,
WritableRaster dest,
Rectangle destRect)
Raster
sources. This method should be overridden by
OpImage subclasses that make use of cobbled
sources, as determined by the setting of the
cobbleSources constructor argument to this class.
The source Rasters are guaranteed to include
at least the area specified by
mapDestRect(destRect). Only the specified
destination region should be written.
Since the subclasses of OpImage may choose
between the cobbling and non-cobbling versions of
computeRect, it is not possible to leave this
method abstract in OpImage. Instead, a default
implementation is provided that throws a
RuntimeException.
sources - an array of source Rasters, one per
source image.dest - a WritableRaster to be filled in.destRect - the Rectangle within the
destination to be written.cobbleSources to true
but does not supply an implementation of this method.
protected void computeRect(PlanarImage[] sources,
WritableRaster dest,
Rectangle destRect)
PlanarImage
sources. This method should be overridden by
OpImage subclasses that do not require cobbled
sources; typically they will instantiate iterators to perform
source access, but they may access sources directly (via the
SampleModel/DataBuffer interfaces) if
they wish.
Since the subclasses of OpImage may choose
between the cobbling and non-cobbling versions of
computeRect, it is not possible to leave this
method abstract in OpImage. Instead, a default
implementation is provided that throws a
RuntimeException.
sources - an array of PlanarImage sources.dest - a WritableRaster to be filled in.destRect - the Rectangle within the
destination to be written.cobbleSources to false
but does not supply an implementation of this method.
public Point[] getTileDependencies(int tileX,
int tileY,
int sourceIndex)
getTile() method should be reported.
The default implementation uses mapDestRect() to
obtain a conservative estimate.
If no dependencies exist, this method returns
null.
This method may be used by optimized implementations of JAI in order to predict future work and create an optimized schedule for performing it.
A given OpImage may mix calls to
getTile() with calls to other methods such as
getData() and copyData() in order to
avoid requesting entire tiles where only a small portion is
needed. In such a case, this method may be overridden to
provide a more accurate estimate of the set of
getTile() calls that will actually be performed.
tileX - the X index of the tile.tileY - the Y index of the tile.sourceIndex - the index of the source image.Points indicating the source
tile dependencies.sourceIndex is
negative or greater than the index of the last source.public Raster[] getTiles(Point[] tileIndices)
getTile() calls
because certain implementations can make optimizations based on
the knowledge that multiple tiles are being asked for at once.
The implementation of this method in this class uses multiple threads to compute multiple tiles at a time.
tileIndices - An array of Points representing
tile indices.Rasters containing the tiles
corresponding to the given tile indices.tileIndices is
null.public TileRequest queueTiles(Point[] tileIndices)
TileScheduler
and the image parameter will be this image.tileIndices - A list of tile indices indicating which tiles
to schedule for computation.tileIndices is
null.
public void cancelTiles(TileRequest request,
Point[] tileIndices)
TileScheduler.request - The request for which tiles are to be cancelled.tileIndices - The tiles to be cancelled; may be null.
Any tiles not actually in the TileRequest will be
ignored.request is
null.public void prefetchTiles(Point[] tileIndices)
tileIndices - A list of tile indices indicating which tiles
to prefetch.tileIndices is
null.
public abstract Rectangle mapSourceRect(Rectangle sourceRect,
int sourceIndex)
sourceRect - The Rectangle in source coordinates.sourceIndex - The index of the source image.Rectangle indicating the potentially
affected destination region, or null if
the region is unknown.sourceRect is
null.
public abstract Rectangle mapDestRect(Rectangle destRect,
int sourceIndex)
destRect - The Rectangle in destination coordinates.sourceIndex - The index of the source image.Rectangle indicating the required source region.destRect is
null.public int getOperationComputeType()
OP_COMPUTE_BOUND,
OP_IO_BOUND, or OP_NETWORK_BOUND to
indicate how the operation is likely to spend its time. The
answer does not affect the output of the operation, but may
allow a scheduler to parallelize the computation of multiple
operations more effectively.
The implementation of this method in this class
returns OP_COMPUTE_BOUND.
public boolean computesUniqueTiles()
true if the OpImage returns an
unique Raster object every time computeTile
is called. OpImages that internally cache
Rasters and return them via computeTile
should return false for this method.
The implementation of this method in this class always returns
true.
protected void finalize()
throws Throwable
Throwable - if an error occurs in the
garbage collector.public boolean hasExtender(int sourceIndex)
BorderExtender. If the source index is out of bounds
for the source vector of this OpImage then an
ArrayIndexOutOfBoundsException may be thrown.sourceIndex - The index of the source in question.true if the indicated source has an extender.
public static int getExpandedNumBands(SampleModel sampleModel,
ColorModel colorModel)
SampleModel and ColorModel.
Normally, this is given by
sampleModel.getNumBands(), but for images with an
IndexColorModel the effective number of bands is
given by colorModel.getNumComponents(), since
a single physical sample represents multiple color components.protected RasterFormatTag[] getFormatTags()
RasterAccessor.
This method will compute and cache the tags the first time
it is called on a particular image. The image's
SampleModel and ColorModel must be
set to their final values before calling this method.
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||