|
|||||||||
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
are 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.
However there are certain operations, the results of which are
incorrect when the source has colormapped imagery, i.e. the source
has an IndexColorModel
, and the computations are
performed on the image's non color transformed pixel data. In JAI,
such operations are those that are implemented as subclasses of
AreaOpImage
, GeometricOpImage
, and the "format"
operation. These operations set the
JAI.KEY_REPLACE_INDEX_COLOR_MODEL
RenderingHint
to true, thus ensuring that the operations are performed correctly
on the colormapped imagery, not treating the indices into the color
map as pixel data.
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 OpImage
s, 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 PlanarImage
s,
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. |
protected TileRecycler |
tileRecycler
A TileRecycler for use in createTile() . |
Fields inherited from class javax.media.jai.PlanarImage |
colorModel, eventManager, height, minX, minY, properties, sampleModel, tileFactory, 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 WritableRaster |
createTile(int tileX,
int tileY)
Creates a WritableRaster at the given tile grid position. |
void |
dispose()
Uncaches all tiles and calls super.dispose() . |
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. |
TileRecycler |
getTileRecycler()
Returns the value of the instance variable tileRecycler . |
Raster[] |
getTiles(Point[] tileIndices)
Computes the tiles indicated by the given tile indices. |
boolean |
hasExtender(int sourceIndex)
Deprecated. as of JAI 1.1. |
Point2D |
mapDestPoint(Point2D destPt,
int sourceIndex)
Computes the position in the specified source that best matches the supplied destination image position. |
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. |
Point2D |
mapSourcePoint(Point2D sourcePt,
int sourceIndex)
Computes the position in the destination that best matches the supplied source image position. |
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. |
protected void |
recycleTile(Raster tile)
A tile recycling convenience method. |
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 RenderedImage s in a Vector . |
protected static Vector |
vectorize(RenderedImage image1,
RenderedImage image2,
RenderedImage image3)
Stores three RenderedImage s 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
OpImage
s 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.protected TileRecycler tileRecycler
TileRecycler
for use in createTile()
.
May be null
. This field is set by the configuration
map passed to .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
and is not
set by another higher priority mechanism as described presently.
Assuming that there is at least one source, the image's
ColorModel
will be set by the first applicable means
in the following priority-ordered list:
null
ColorModel
from
ImageLayout
;null
ColorModel
from
ImageLayout
if compatible with
SampleModel
in ImageLayout
or if
SampleModel
in ImageLayout
is
null
;ColorModelFactory
set via the
JAI.KEY_COLOR_MODEL_FACTORY
configuration variable if
compatible with SampleModel
;IndexColorModel
(or
null
if no compatible non-IndexColorModel
could be generated), if the source has an IndexColorModel
and JAI.KEY_REPLACE_INDEX_COLOR_MODEL
is Boolean.TRUE
;ColorModel
of first source if compatible with
SampleModel
;JAI.KEY_DEFAULT_COLOR_MODEL_METHOD
configuration variable
if JAI.KEY_DEFAULT_COLOR_MODEL_ENABLED
is
Boolean.TRUE
.ColorModel
by any of
these means it will remain null
.
The image's tile dimensions will be set by the first applicable
means in the following priority-ordered list. Note that each tile
dimension, the tileWidth
and the
tileHeight
, is considered independently :
ImageLayout
(either by
the user or the operator itself);null
.
The tile dimension will be clamped to the minimum of that of the
source tile dimension and the image's corresponding dimension;null
default tile size returned by
JAI.getDefaultTileSize()
, if the corresponding
image dimension is at least double the default tile size; 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_COLOR_MODEL_FACTORY
: specifies a
ColorModelFactory
to be used to generate the
ColorModel
of the image. If such a callback is
provided it will be invoked if and only if either no
ImageLayout
hint is given, or an ImageLayout
hint is given but contains a non-null
ColorModel
which is incompatible with the image
SampleModel
. In other words, such a callback provides
the second priority mechanism for setting the ColorModel
of the image.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.
JAI.KEY_TILE_FACTORY
: specifies a
TileFactory
to be used to generate the tiles of the
image via TileFactory.createTile(SampleModel,Point)
. If
no such configuration variable is given, a new Raster
will be created for each image tile. This behavior may be
overridden by subclasses which have alternate means of saving
memory, for example as in the case of point operations which
may overwrite a source image not referenced by user code. Note
that the corresponding instance variable is actually set by
the superclass constructor.JAI.KEY_TILE_RECYCLER
: specifies a
TileRecycler
to be used to recycle the tiles of the
image when the dispose()
method is invoked. If
such a configuration variable is set, the image has a
non-null
TileCache
, and tile recycling
is enabled, then invoking dispose()
will cause each
of the tiles of this image currently in the cache to be passed to
the configured TileRecycler
TileRecycler.recycleTile(Raster)
.
JAI.KEY_CACHED_TILE_RECYCLING_ENABLED
: specifies a
Boolean
value which indicates whether {#dispose()}
should pass to tileRecycler.recycleTile()
any image
tiles remaining in the cache. 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.Key
s and image properties indexed
by String
s or CaselessStringKey
s.
This parameter may be null
.cobbleSources
- Indicates which variant of the
computeRect
method should be called.IllegalArgumentException
- If sources
is non-null
and any object in
sources
is null
.RuntimeException
- If default 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.IllegalArgumentException
- if image
is
null
.protected static Vector vectorize(RenderedImage image1, RenderedImage image2)
RenderedImage
s 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.IllegalArgumentException
- if image1
or
image2
is null
.protected static Vector vectorize(RenderedImage image1, RenderedImage image2, RenderedImage image3)
RenderedImage
s 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.IllegalArgumentException
- if 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
.
getTile
in class PlanarImage
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 Raster
s are guaranteed to include
at least the area specified by mapDestRect(destRect)
unless this area is empty or does not intersect the corresponding
source in which case the source Raster
will be null
. 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 Raster
s, one per
source image.dest
- a WritableRaster
to be filled in.destRect
- the Rectangle
within the
destination to be written.RuntimeException
- If this method is invoked on the subclass
that sets 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.RuntimeException
- If this method is invoked on the subclass
that sets 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.Point
s indicating the source
tile dependencies.IllegalArgumentException
- If 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.
getTiles
in class PlanarImage
tileIndices
- An array of Point
s representing
tile indices.Raster
s containing the tiles
corresponding to the given tile indices.IllegalArgumentException
- If tileIndices
is
null
.public TileRequest queueTiles(Point[] tileIndices)
TileScheduler
and the image parameter will be this image.queueTiles
in class PlanarImage
tileIndices
- A list of tile indices indicating which tiles
to schedule for computation.IllegalArgumentException
- If tileIndices
is
null
.public void cancelTiles(TileRequest request, Point[] tileIndices)
TileScheduler
.cancelTiles
in class PlanarImage
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.IllegalArgumentException
- If request
is
null
.public void prefetchTiles(Point[] tileIndices)
prefetchTiles
in class PlanarImage
tileIndices
- A list of tile indices indicating which tiles
to prefetch.IllegalArgumentException
- If tileIndices
is
null
.public Point2D mapDestPoint(Point2D destPt, int sourceIndex)
null
will be returned. If the point is mapped
outside the source bounds, the coordinate value or null
may be returned at the discretion of the implementation.
Floating-point input and output coordinates are supported, and recommended when possible. Subclass implementations may however use integer computation if necessary for simplicity.
The implementation in this class returns the value of
pt
in the following code snippet:
Rectangle destRect = new Rectangle((int)destPt.getX(), (int)destPt.getY(), 1, 1); Rectangle sourceRect = mapDestRect(destRect, sourceIndex); Point2D pt = (Point2D)destPt.clone(); pt.setLocation(sourceRect.x + (sourceRect.width - 1.0)/2.0, sourceRect.y + (sourceRect.height - 1.0)/2.0);Subclasses requiring different behavior should override this method.
destPt
- the position in destination image coordinates
to map to source image coordinates.sourceIndex
- the index of the source image.Point2D
of the same class as
destPt
or null
.IllegalArgumentException
- if destPt
is
null
.IndexOutOfBoundsException
- if sourceIndex
is
negative or greater than or equal to the number of sources.public Point2D mapSourcePoint(Point2D sourcePt, int sourceIndex)
null
will be returned. If the point is mapped
outside the destination bounds, the coordinate value or
null
may be returned at the discretion of the
implementation.
Floating-point input and output coordinates are supported, and recommended when possible. Subclass implementations may however use integer computation if necessary for simplicity.
The implementation in this class returns the value of
pt
in the following code snippet:
Rectangle sourceRect = new Rectangle((int)sourcePt.getX(), (int)sourcePt.getY(), 1, 1); Rectangle destRect = mapSourceRect(sourceRect, sourceIndex); Point2D pt = (Point2D)sourcePt.clone(); pt.setLocation(destRect.x + (destRect.width - 1.0)/2.0, destRect.y + (destRect.height - 1.0)/2.0);
sourcePt
- the position in source image coordinates
to map to destination image coordinates.sourceIndex
- the index of the source image.Point2D
of the same class as
sourcePt
or null
.IllegalArgumentException
- if sourcePt
is
null
.IndexOutOfBoundsException
- if sourceIndex
is
negative or greater than or equal to the number of sources.public abstract Rectangle mapSourceRect(Rectangle sourceRect, int sourceIndex)
Rectangle
may be returned
if the destination is unaffected by the contents of the source
rectangle. This is distinct from a null
return value
which serves rather to indicate that it is not possible to
determine the bounds of the affected region. The safest
interpretation of a null
return value is that the
entire destination might be affected by any pixel within the
given source rectangle.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.IllegalArgumentException
- If the source index is
negative or greater than that of the last source.IllegalArgumentException
- If sourceRect
is
null
.public abstract Rectangle mapDestRect(Rectangle destRect, int sourceIndex)
Rectangle
to the actual bounds of the
source or may treat the source as having infinite extent.
It is therefore the responsibility of the invoking
object to constrain the region in accordance with its needs.
Returning an empty Rectangle
should indicate that
the data of the source image in question are not required for the
computation of the specified destination region. If the entire
source image might be required to compute this destination
region, then getSourceImage(sourceIndex).getBounds()
should be returned.
To illustrate the issue of whether the source should be thought
to have infinite extent, consider the case wherein computing a
destination pixel requires multiple source pixels of context. At
the source image boundary, these pixels might only be available if the
source data were extrapolated, e.g., using a BorderExtender
.
If such an extender were available, destination pixels could be
computed even if they mapped to a region on the source boundary so
in this case the source could be considered to have infinite extent.
If no such extender were available, only destination pixels with
source context contained within the source image bounds could be
considered so that it might be preferable to clip the rectangle to
the source bounds.
destRect
- The Rectangle
in destination coordinates.sourceIndex
- The index of the source image.null
Rectangle
indicating
the required source region.IllegalArgumentException
- If the source index is
negative or greater than that of the last source.IllegalArgumentException
- If 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. OpImage
s that internally cache
Raster
s and return them via computeTile
should return false
for this method.
The implementation of this method in this class always returns
true
.
public void dispose()
super.dispose()
.
If a TileRecycler
was defined via the configuration
variable JAI.KEY_TILE_RECYCLER
when this image was
constructed and tile recycling was enabled via the configuration
variable JAI.KEY_CACHED_TILE_RECYCLING_ENABLED
, then each
of this image's tiles which is currently in the cache will be
recycled. This method may be invoked more than once although
invocations after the first one may do nothing.
The results of referencing an image after a call to
dispose()
are undefined.
dispose
in class PlanarImage
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.
RasterFormatTag
s for the
sources in the first getNumSources()
elements and a
RasterFormatTag
for the destination in the last element.public TileRecycler getTileRecycler()
tileRecycler
.protected final WritableRaster createTile(int tileX, int tileY)
WritableRaster
at the given tile grid position.
The superclass method PlanarImage.createWritableRaster(SampleModel,Point)
will be invoked with this image's SampleModel
and the
location of the specified tile.
Subclasses should ideally use this method to create destination
tiles as this method will take advantage of any
TileFactory
specified to the OpImage
at
construction.
protected void recycleTile(Raster tile)
If tileRecycler
is non-null
, the call
is forwarded to TileRecycler.recycleTile(Raster)
; otherwise
the method does nothing.
This method is for use by subclasses which create
Raster
s with limited scope which therefore may easily
be identified as safe candidates for recycling. This might occur
for example within
computeRect(Raster[],WritableRaster,Rectangle)
or
computeTile(int,int)
wherein Raster
s may be
created for use within the method but be eligible for garbage
collection once the method is exited.
IllegalArgumentException
- if tile
is
null
.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |