protected void computeRect(Raster[] sources,
WritableRaster dest,
Rectangle destRect) {
// Cast the Interpolation object to InterpolationTable object
InterpolationTable jtable = (InterpolationTable)interp;
// The Medialib InterpolationTable class equivalent
mediaLibImageInterpTable mlibInterpTable;
Raster source = sources[0];
Rectangle srcRect = source.getBounds();
int formatTag = MediaLibAccessor.findCompatibleTag(sources, dest);
MediaLibAccessor srcAccessor = new MediaLibAccessor(source, srcRect,
formatTag);
MediaLibAccessor dstAccessor = new MediaLibAccessor(dest, destRect,
formatTag);
// Get the floating point scale factors
float mlibScaleX = (float)scaleXRationalNum / (float)scaleXRationalDenom;
float mlibScaleY = (float)scaleYRationalNum / (float)scaleYRationalDenom;
// Translation to be specified to Medialib. Note that we have to
// specify an additional translation since all images are 0 based
// in Medialib.
// Calculate intermediate values.
float tempDX = (float)(srcRect.x * scaleXRationalNum) /
(float)scaleXRationalDenom;
float tempDY = (float)(srcRect.y * scaleYRationalNum) /
(float)scaleYRationalDenom;
float tx = transX - destRect.x + tempDX;
float ty = transY - destRect.y + tempDY;
mediaLibImage srcML[], dstML[];
switch (dstAccessor.getDataType()) {
case DataBuffer.TYPE_BYTE:
case DataBuffer.TYPE_USHORT:
case DataBuffer.TYPE_SHORT:
case DataBuffer.TYPE_INT:
mlibInterpTable =
new mediaLibImageInterpTable(Constants.MLIB_INT,
jtable.getWidth(),
jtable.getHeight(),
jtable.getLeftPadding(),
jtable.getTopPadding(),
jtable.getSubsampleBitsH(),
jtable.getSubsampleBitsV(),
jtable.getPrecisionBits(),
jtable.getHorizontalTableData(),
jtable.getVerticalTableData());
srcML = srcAccessor.getMediaLibImages();
dstML = dstAccessor.getMediaLibImages();
for (int i = 0 ; i < dstML.length; i++) {
Image.ZoomTranslateTable(dstML[i], srcML[i],
(double)mlibScaleX,
(double)mlibScaleY,
(double)tx, (double)ty,
mlibInterpTable,
Constants.MLIB_EDGE_DST_NO_WRITE);
MlibUtils.clampImage(dstML[i], getColorModel());
}
break;
case DataBuffer.TYPE_FLOAT:
mlibInterpTable =
new mediaLibImageInterpTable(
Constants.MLIB_FLOAT,
jtable.getWidth(),
jtable.getHeight(),
jtable.getLeftPadding(),
jtable.getTopPadding(),
jtable.getSubsampleBitsH(),
jtable.getSubsampleBitsV(),
jtable.getPrecisionBits(),
jtable.getHorizontalTableDataFloat(),
jtable.getVerticalTableDataFloat());
srcML = srcAccessor.getMediaLibImages();
dstML = dstAccessor.getMediaLibImages();
for (int i = 0 ; i < dstML.length; i++) {
Image.ZoomTranslateTable_Fp(dstML[i], srcML[i],
(double)mlibScaleX,
(double)mlibScaleY,
(double)tx,
(double)ty,
mlibInterpTable,
Constants.MLIB_EDGE_DST_NO_WRITE);
}
break;
case DataBuffer.TYPE_DOUBLE:
mlibInterpTable =
new mediaLibImageInterpTable(
Constants.MLIB_DOUBLE,
jtable.getWidth(),
jtable.getHeight(),
jtable.getLeftPadding(),
jtable.getTopPadding(),
jtable.getSubsampleBitsH(),
jtable.getSubsampleBitsV(),
jtable.getPrecisionBits(),
jtable.getHorizontalTableDataDouble(),
jtable.getVerticalTableDataDouble());
srcML = srcAccessor.getMediaLibImages();
dstML = dstAccessor.getMediaLibImages();
for (int i = 0 ; i < dstML.length; i++) {
Image.ZoomTranslateTable_Fp(dstML[i], srcML[i],