You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2021/10/23 16:25:23 UTC
[sis] branch geoapi-4.0 updated: Merge the "clip" and "mask"
methods in a single "mask" method with boolean argument.
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
The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
new d5601f3 Merge the "clip" and "mask" methods in a single "mask" method with boolean argument.
d5601f3 is described below
commit d5601f3eca46f519d5f8ef14b7832237f0066f98
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Sat Oct 23 18:24:57 2021 +0200
Merge the "clip" and "mask" methods in a single "mask" method with boolean argument.
---
.../sis/coverage/grid/GridCoverageProcessor.java | 37 +++++++---------------
.../java/org/apache/sis/image/ImageProcessor.java | 37 ++++++----------------
2 files changed, 21 insertions(+), 53 deletions(-)
diff --git a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageProcessor.java b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageProcessor.java
index d79cea9..c631458 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageProcessor.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/coverage/grid/GridCoverageProcessor.java
@@ -163,42 +163,27 @@ public class GridCoverageProcessor implements Cloneable {
}
/**
- * Applies a clip defined by a region of interest (ROI).
- * All pixels <em>outside</em> the given ROI are set to the {@linkplain #getFillValues() fill values}.
+ * Applies a mask defined by a region of interest (ROI). If {@code maskInside} is {@code true},
+ * then all pixels inside the given ROI are set to the {@linkplain #getFillValues() fill values}.
+ * If {@code maskInside} is {@code false}, then the mask is reversed:
+ * the pixels set to fill values are the ones outside the ROI.
*
- * @param source the coverage on which to apply a clip.
- * @param clip region (in arbitrary CRS) of pixels to keep.
- * @return a coverage with clip applied.
- * @throws TransformException if ROI coordinates can not be transformed to grid coordinates.
- *
- * @since 1.2
- */
- public GridCoverage clip(final GridCoverage source, final RegionOfInterest clip) throws TransformException {
- ArgumentChecks.ensureNonNull("source", source);
- ArgumentChecks.ensureNonNull("clip", clip);
- final Shape roi = clip.toShape2D(source.getGridGeometry());
- RenderedImage data = source.render(null);
- data = imageProcessor.clip(data, roi);
- return new GridCoverage2D(source, data);
- }
-
- /**
- * Applies a mask defined by a region of interest (ROI).
- * All pixels <em>inside</em> the given ROI are set to the {@linkplain #getFillValues() fill values}.
- *
- * @param source the coverage on which to apply a mask.
- * @param mask region (in arbitrary CRS) of pixels to mask.
+ * @param source the coverage on which to apply a mask.
+ * @param mask region (in arbitrary CRS) of the mask.
+ * @param maskInside {@code true} for masking pixels inside the shape, or {@code false} for masking outside.
* @return a coverage with mask applied.
* @throws TransformException if ROI coordinates can not be transformed to grid coordinates.
*
* @since 1.2
*/
- public GridCoverage mask(final GridCoverage source, final RegionOfInterest mask) throws TransformException {
+ public GridCoverage mask(final GridCoverage source, final RegionOfInterest mask, final boolean maskInside)
+ throws TransformException
+ {
ArgumentChecks.ensureNonNull("source", source);
ArgumentChecks.ensureNonNull("mask", mask);
final Shape roi = mask.toShape2D(source.getGridGeometry());
RenderedImage data = source.render(null);
- data = imageProcessor.mask(data, roi);
+ data = imageProcessor.mask(data, roi, maskInside);
return new GridCoverage2D(source, data);
}
diff --git a/core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java b/core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java
index ab99ab8..08866cb 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/image/ImageProcessor.java
@@ -744,43 +744,26 @@ public class ImageProcessor implements Cloneable {
}
/**
- * Applies a clip defined by a geometric shape.
- * All pixels <em>outside</em> the given shape are set to the {@linkplain #getFillValues() fill values}.
- *
- * @param source the image on which to apply a clip.
- * @param clip geometric area (in pixel coordinates) of pixels to keep.
- * @return an image with clip applied.
- *
- * @since 1.2
- */
- public RenderedImage clip(final RenderedImage source, final Shape clip) {
- ArgumentChecks.ensureNonNull("source", source);
- ArgumentChecks.ensureNonNull("clip", clip);
- final Number[] fillValues;
- synchronized (this) {
- fillValues = this.fillValues;
- }
- return unique(new MaskedImage(source, clip, false, fillValues));
- }
-
- /**
- * Applies a mask defined by a geometric shape.
- * All pixels <em>inside</em> the given shape are set to the {@linkplain #getFillValues() fill values}.
- *
- * @param source the image on which to apply a mask.
- * @param mask geometric area (in pixel coordinates) of pixels to mask.
+ * Applies a mask defined by a geometric shape. If {@code maskInside} is {@code true},
+ * then all pixels inside the given shape are set to the {@linkplain #getFillValues() fill values}.
+ * If {@code maskInside} is {@code false}, then the mask is reversed:
+ * the pixels set to fill values are the ones outside the shape.
+ *
+ * @param source the image on which to apply a mask.
+ * @param mask geometric area (in pixel coordinates) of the mask.
+ * @param maskInside {@code true} for masking pixels inside the shape, or {@code false} for masking outside.
* @return an image with mask applied.
*
* @since 1.2
*/
- public RenderedImage mask(final RenderedImage source, final Shape mask) {
+ public RenderedImage mask(final RenderedImage source, final Shape mask, final boolean maskInside) {
ArgumentChecks.ensureNonNull("source", source);
ArgumentChecks.ensureNonNull("mask", mask);
final Number[] fillValues;
synchronized (this) {
fillValues = this.fillValues;
}
- return unique(new MaskedImage(source, mask, true, fillValues));
+ return unique(new MaskedImage(source, mask, maskInside, fillValues));
}
/**