sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject [sis] 02/04: Make the `bounds` argument optional, with default to the full image.
Date Thu, 03 Sep 2020 13:51:11 GMT
This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 65f809b78a86dc170250afb2b7d842d2f8b18fa4
Author: Martin Desruisseaux <martin.desruisseaux@geomatys.com>
AuthorDate: Thu Sep 3 11:54:47 2020 +0200

    Make the `bounds` argument optional, with default to the full image.
---
 .../src/main/java/org/apache/sis/image/ImageCombiner.java  | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java b/core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java
index 8a1f5d9..533d3ac 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/image/ImageCombiner.java
@@ -29,6 +29,7 @@ import org.apache.sis.internal.coverage.j2d.ImageLayout;
 import org.apache.sis.internal.coverage.j2d.ImageUtilities;
 import org.apache.sis.internal.coverage.j2d.TileOpExecutor;
 import org.apache.sis.internal.util.Numerics;
+import org.apache.sis.internal.jdk9.JDK9;
 import org.apache.sis.util.ArgumentChecks;
 import org.apache.sis.measure.Units;
 
@@ -211,22 +212,27 @@ public class ImageCombiner implements Consumer<RenderedImage>
{
      * Destination pixels that can not be mapped to source pixels are left unchanged.
      *
      * @param  source    the image to be resampled.
-     * @param  bounds    domain of pixel coordinates in the destination image.
+     * @param  bounds    domain of pixel coordinates in the destination image, or {@code
null} for the whole image.
      * @param  toSource  conversion of pixel coordinates from destination image to {@code
source} image.
      *
      * @see ImageProcessor#resample(RenderedImage, Rectangle, MathTransform)
      */
     public void resample(final RenderedImage source, Rectangle bounds, final MathTransform
toSource) {
+        ArgumentChecks.ensureNonNull("source",   source);
+        ArgumentChecks.ensureNonNull("toSource", toSource);
+        if (bounds == null) {
+            bounds = ImageUtilities.getBounds(destination);
+        }
         final int  tileWidth       = destination.getTileWidth();
         final int  tileHeight      = destination.getTileHeight();
         final long tileGridXOffset = destination.getTileGridXOffset();
         final long tileGridYOffset = destination.getTileGridYOffset();
         final int  minTileX        = Math.toIntExact(Math.floorDiv((bounds.x - tileGridXOffset),
tileWidth));
         final int  minTileY        = Math.toIntExact(Math.floorDiv((bounds.y - tileGridYOffset),
tileHeight));
-        final int  minX            = Math.toIntExact((minTileX * (long) tileWidth)  + tileGridXOffset);
-        final int  minY            = Math.toIntExact((minTileY * (long) tileHeight) + tileGridYOffset);
+        final int  minX            = Math.toIntExact(JDK9.multiplyFull(minTileX, tileWidth)
 + tileGridXOffset);
+        final int  minY            = Math.toIntExact(JDK9.multiplyFull(minTileY, tileHeight)
+ tileGridYOffset);
         /*
-         * Exand the target bounds until it contains an integer number of tiles, computed
using the size
+         * Expand the target bounds until it contains an integer number of tiles, computed
using the size
          * of destination tiles. We have to do that because the resample operation below
is not free to
          * choose a tile size suiting the given bounds.
          */


Mime
View raw message