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;