Method method = null;
try {
method = GRAPHICS2D_CLASS.getMethod(name, argTypes);
} catch(Exception e) {
String message = JaiI18N.getString("TiledImageGraphics2") + name;
sendExceptionToListener(message, new ImagingException(e));
// throw new RuntimeException(e.getMessage());
}
// Transform requested area to obtain actual bounds.
Rectangle bounds = new Rectangle(x, y, width, height);
bounds = getTransform().createTransformedShape(bounds).getBounds();
// Determine the range of tile indexes
int minTileX = tiledImage.XToTileX(bounds.x);
if(minTileX < tileXMinimum)
minTileX = tileXMinimum;
int minTileY = tiledImage.YToTileY(bounds.y);
if(minTileY < tileYMinimum)
minTileY = tileYMinimum;
int maxTileX = tiledImage.XToTileX(bounds.x + bounds.width - 1);
if(maxTileX > tileXMaximum)
maxTileX = tileXMaximum;
int maxTileY = tiledImage.YToTileY(bounds.y + bounds.height - 1);
if(maxTileY > tileYMaximum)
maxTileY = tileYMaximum;
// Loop over the tiles
for(int tileY = minTileY; tileY <= maxTileY; tileY++) {
int tileMinY = tiledImage.tileYToY(tileY);
for(int tileX = minTileX; tileX <= maxTileX; tileX++) {
int tileMinX = tiledImage.tileXToX(tileX);
// Get the WritableRaster of the current tile
WritableRaster wr = tiledImage.getWritableTile(tileX, tileY);
wr = wr.createWritableTranslatedChild(0, 0);
// Create an equivalent BufferedImage
BufferedImage bi =
new BufferedImage(colorModel, wr,
colorModel.isAlphaPremultiplied(),
properties);
// Create the associated Graphics2D
Graphics2D g2d = bi.createGraphics();
// Initialize the Graphics2D state
copyState(g2d);
// Bias the tile origin so that the global coordinates
// map correctly onto the tile.
try {
Point2D origin2D =
g2d.getTransform().transform(new Point2D.Double(),
null);
Point pt = new Point((int)origin2D.getX() - tileMinX,
(int)origin2D.getY() - tileMinY);
Point2D pt2D =
g2d.getTransform().inverseTransform(pt, null);
g2d.translate(pt2D.getX(), pt2D.getY());
} catch(Exception e) {
String message = JaiI18N.getString("TiledImageGraphics3");
sendExceptionToListener(message, new ImagingException(e));
// throw new RuntimeException(e.getMessage());
}
// Perform the graphics operation
try {
Object retVal = method.invoke(g2d, args);
if(retVal != null && retVal.getClass() == boolean.class) {
returnValue = ((Boolean)retVal).booleanValue();
}
} catch(Exception e) {
String message =
JaiI18N.getString("TiledImageGraphics3") + " " + name;
sendExceptionToListener(message, new ImagingException(e));
// throw new RuntimeException(e.getMessage());
}
// Dispose of the Graphics2D
g2d.dispose();