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 2034647ba9f06b8c8c27073d61be770a22c33692
Author: Martin Desruisseaux <martin.desruisse...@geomatys.com>
AuthorDate: Sat Nov 27 16:54:00 2021 +0100

    Fix an `IndexOutOfBoundsException` when stretching the colors of an 
`IndexColorModel`.
---
 .../src/main/java/org/apache/sis/image/RecoloredImage.java   | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git 
a/core/sis-feature/src/main/java/org/apache/sis/image/RecoloredImage.java 
b/core/sis-feature/src/main/java/org/apache/sis/image/RecoloredImage.java
index e0a8c78..2237ee6 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/image/RecoloredImage.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/image/RecoloredImage.java
@@ -225,8 +225,8 @@ final class RecoloredImage extends ImageAdapter {
             final int size = icm.getMapSize();
             int validMin = 0;
             int validMax = size - 1;        // Inclusive.
-            double span = 0;
             if (range != null) {
+                double span = 0;
                 for (final Category category : range.getCategories()) {
                     if (category.isQuantitative()) {
                         final NumberRange<?> r = category.getSampleRange();
@@ -245,12 +245,12 @@ final class RecoloredImage extends ImageAdapter {
              * Create a copy of RGB codes and replace values in the range of 
the quantitative category.
              * Values for other categories (qualitative) are left unmodified.
              */
-            final int   end   = Math.max(Math.min((int) maximum, validMax), 
validMin);      // Inclusive.
-            final int   start = Math.min(Math.max((int) minimum, validMin), 
end);
+            final int   start = Math.max((int) minimum, validMin);
+            final int   end   = Math.min((int) maximum, validMax);          // 
Inclusive.
             final int[] ARGB  = new int[size];
-            icm.getRGBs(ARGB);
-            Arrays.fill(ARGB, validMin, start, icm.getRGB(validMin));
-            Arrays.fill(ARGB, end+1, validMax, icm.getRGB(validMax));
+            icm.getRGBs(ARGB);                                              // 
Initialize to a copy of current colors.
+            Arrays.fill(ARGB, validMin, start,   icm.getRGB(validMin));     // 
Part of quantitative category outside the new range.
+            Arrays.fill(ARGB, end+1, validMax+1, icm.getRGB(validMax));
             final float scale = (float) ((validMax - validMin) / (maximum - 
minimum));
             for (int i = start; i <= end; i++) {
                 final float s = (i - start) * scale + validMin;

Reply via email to