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 07e580721c11d427c1ac0f5fd5bb32da669fb332
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Tue Aug 31 17:13:33 2021 +0200

    Fix a NullPointerException.
---
 .../main/java/org/apache/sis/coverage/SampleDimension.java |  2 ++
 .../org/apache/sis/storage/geotiff/ImageFileDirectory.java | 14 +++++++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git 
a/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java 
b/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java
index eb266a0..bc09f3a 100644
--- 
a/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java
+++ 
b/core/sis-feature/src/main/java/org/apache/sis/coverage/SampleDimension.java
@@ -797,6 +797,8 @@ public class SampleDimension implements Serializable {
          * @throws IllegalArgumentException if the range is empty.
          */
         public Builder addQualitative(final CharSequence name, final Number 
minimum, final Number maximum) {
+            ArgumentChecks.ensureNonNull("minimum", minimum);
+            ArgumentChecks.ensureNonNull("maximum", maximum);
             return addQualitative(name, range(Numbers.widestClass(minimum, 
maximum), minimum, maximum));
         }
 
diff --git 
a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
 
b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
index 31eb946..a6685c0 100644
--- 
a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
+++ 
b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
@@ -1388,8 +1388,10 @@ final class ImageFileDirectory extends DataCube {
                 final SampleDimension.Builder builder = new 
SampleDimension.Builder();
                 final InternationalString name = 
Vocabulary.formatInternational(Vocabulary.Keys.Value);
                 for (int band = 0; band < samplesPerPixel;) {
-                    builder.addQualitative(name, minValues.get(Math.min(band, 
minValues.size()-1)),
-                                                 maxValues.get(Math.min(band, 
maxValues.size()-1)));
+                    if (minValues != null && maxValues != null) {
+                        builder.addQualitative(name, 
minValues.get(Math.min(band, minValues.size()-1)),
+                                                     
maxValues.get(Math.min(band, maxValues.size()-1)));
+                    }
                     dimensions[band] = builder.setName(++band).build();
                     builder.clear();
                 }
@@ -1520,9 +1522,11 @@ final class ImageFileDirectory extends DataCube {
                     if (photometricInterpretation == 0) {
                         ArraysExt.swap(colors, 0, 1);
                     }
-                    colorModel = ColorModelFactory.createColorScale(dataType, 
samplesPerPixel, visibleBand,
-                            Math.max(minValues.doubleValue(visibleBand), 0),
-                            Math.min(maxValues.doubleValue(visibleBand), (1 << 
bitsPerSample) - 1), colors);
+                    double min = 0;
+                    double max = Numerics.bitmask(bitsPerSample) - 1;
+                    if (minValues != null) min = 
Math.max(minValues.doubleValue(visibleBand), min);
+                    if (maxValues != null) max = 
Math.min(maxValues.doubleValue(visibleBand), max);
+                    colorModel = ColorModelFactory.createColorScale(dataType, 
samplesPerPixel, visibleBand, min, max, colors);
                     break;
                 }
                 case 2: {                   // RGB: (0,0,0) is black and 
(255,255,255) is white.

Reply via email to