[OpenJDK 2D-Dev] BufferedImage.getTileGridXOffset() not compliant with its specification?
Martin Desruisseaux
martin.desruisseaux at geomatys.com
Fri Feb 21 13:36:16 UTC 2020
Hello all
Implementation of getTileGridXOffset() and getTileGridXOffset() in
BufferedImage seems in contradiction with specification. The
RenderedImage specification said:
Returns the X offset of the tile grid relative to the origin, i.e.,
the X coordinate of the upper-left pixel of tile (0, 0). (Note that
tile (0, 0) may not actually exist.)
Since BufferedImage has only one tile, always at index (0,0), the (x,y)
coordinates of the upper-left pixel of that tile should be the image
(minX, minY), which is always (0,0) in a BufferedImage. Indeed
BufferedImage.getTileGridXOffset() javadoc adds the following sentence:
This is always zero.
But the BufferedImage implementation is:
public int getTileGridXOffset() {
return raster.getSampleModelTranslateX();
}
Which does not always returns zero. It can be demonstrated by the
following test case:
import java.awt.Dimension;
import java.awt.image.BufferedImage;
class Test {
public static void main(String[] args) throws Exception {
BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
BufferedImage sub = img.getSubimage(10, 20, 50, 50);
System.out.println(sub.getTileGridXOffset());
System.out.println(sub.getTileGridYOffset());
}
}
Which prints -10 and -20.
Proposed fix: given that coordinates of BufferedImage == coordinates of
tile (0,0) (this fact is hard-coded in BuffereImage.getMinTileX()
returning the hard-coded 0 value, BuffereImage.getNumXTiles() returning
the hard-coded 1 value (same for Y), and in BufferedImage.getMinX(),
getMinY(), getWidth() and getHeight() delegating to the Raster),
applying the same logic we should have:
public int getTileGridXOffset() {
return raster.getMinX();
}
public int getTileGridXOffset() {
return raster.getMinY();
}
Even if raster.getMinX() / getMinY() should always return 0, those
methods are invoked for consistency with current implementation of
BufferedImage.getMinX() / getMinY().
If above analysis is correct, do I need to provide a GitHub pull request
or other submission mechanism?
Regards,
Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/2d-dev/attachments/20200221/d230d3a5/attachment.htm>
More information about the 2d-dev
mailing list