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 f42386f4e9eaf90c90013e61a00661320df5f2e4 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Sat Dec 14 10:07:33 2024 +0100 Rename `ColorModelBuilder` as `ColorScaleBuilder` for reflecting the fact that it is about indexed color model, and for making the `ColorModelBuilder` name available for a builder for other cases. --- .../sis/coverage/grid/GridCoverageBuilder.java | 6 +++--- .../org/apache/sis/coverage/grid/ImageRenderer.java | 10 +++++----- .../apache/sis/coverage/privy/ColorModelType.java | 2 +- ...ColorModelBuilder.java => ColorScaleBuilder.java} | 20 ++++++++++---------- .../apache/sis/coverage/privy/ColorsForRange.java | 6 +++--- .../org/apache/sis/image/BandedSampleConverter.java | 6 +++--- .../main/org/apache/sis/image/Colorizer.java | 4 ++-- .../main/org/apache/sis/image/Visualization.java | 18 +++++++++--------- .../sis/coverage/privy/ColorModelBuilderTest.java | 8 ++++---- .../org/apache/sis/map/coverage/RenderingData.java | 4 ++-- 10 files changed, 42 insertions(+), 42 deletions(-) diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridCoverageBuilder.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridCoverageBuilder.java index c73376aa9f..37e9c3e3f7 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridCoverageBuilder.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/GridCoverageBuilder.java @@ -36,7 +36,7 @@ import org.opengis.geometry.Envelope; import org.opengis.referencing.operation.TransformException; import org.apache.sis.image.PlanarImage; import org.apache.sis.coverage.SampleDimension; -import org.apache.sis.coverage.privy.ColorModelBuilder; +import org.apache.sis.coverage.privy.ColorScaleBuilder; import org.apache.sis.coverage.privy.ImageUtilities; import org.apache.sis.coverage.privy.ObservableImage; import org.apache.sis.coverage.privy.TiledImage; @@ -473,12 +473,12 @@ public class GridCoverageBuilder { */ bands = GridCoverage2D.defaultIfAbsent(bands, null, raster.getNumBands()); final SampleModel sm = raster.getSampleModel(); - final var colorizer = new ColorModelBuilder(ColorModelBuilder.GRAYSCALE, null, false); + final var colorizer = new ColorScaleBuilder(ColorScaleBuilder.GRAYSCALE, null, false); final ColorModel colors; if (colorizer.initialize(sm, bands.get(visibleBand)) || colorizer.initialize(sm, visibleBand)) { colors = colorizer.createColorModel(ImageUtilities.getBandType(sm), bands.size(), visibleBand); } else { - colors = ColorModelBuilder.NULL_COLOR_MODEL; + colors = ColorScaleBuilder.NULL_COLOR_MODEL; } /* * Create an image from the raster. We favor BufferedImage instance when possible, diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ImageRenderer.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ImageRenderer.java index e344c78bbb..8867349e4f 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ImageRenderer.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/grid/ImageRenderer.java @@ -45,7 +45,7 @@ import org.apache.sis.coverage.SubspaceNotSpecifiedException; import org.apache.sis.coverage.MismatchedCoverageRangeException; import org.apache.sis.coverage.SampleDimension; import org.apache.sis.coverage.Category; -import org.apache.sis.coverage.privy.ColorModelBuilder; +import org.apache.sis.coverage.privy.ColorScaleBuilder; import org.apache.sis.coverage.privy.DeferredProperty; import org.apache.sis.coverage.privy.RasterFactory; import org.apache.sis.coverage.privy.ObservableImage; @@ -270,7 +270,7 @@ public class ImageRenderer { /** * The colors to use for each category. Never {@code null}. * The function may return {@code null}, which means transparent. - * The default value is {@link ColorModelBuilder#GRAYSCALE}. + * The default value is {@link ColorScaleBuilder#GRAYSCALE}. * * @see #setCategoryColors(Function) */ @@ -366,7 +366,7 @@ public class ImageRenderer { this.pixelStride = toIntExact(pixelStride); this.scanlineStride = toIntExact(scanlineStride); this.offsetZ = offsetZ; - this.colors = ColorModelBuilder.GRAYSCALE; + this.colors = ColorScaleBuilder.GRAYSCALE; } /** @@ -750,13 +750,13 @@ public class ImageRenderer { @SuppressWarnings("UseOfObsoleteCollectionType") public RenderedImage createImage() { final Raster raster = createRaster(); - final var colorizer = new ColorModelBuilder(colors, null, false); + final var colorizer = new ColorScaleBuilder(colors, null, false); final ColorModel cm; final SampleModel sm = raster.getSampleModel(); if (colorizer.initialize(sm, bands[visibleBand]) || colorizer.initialize(sm, visibleBand)) { cm = colorizer.createColorModel(buffer.getDataType(), bands.length, visibleBand); } else { - cm = ColorModelBuilder.NULL_COLOR_MODEL; + cm = ColorScaleBuilder.NULL_COLOR_MODEL; } SliceGeometry supplier = null; if (imageGeometry == null) { diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelType.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelType.java index acf35496af..30166e1440 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelType.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelType.java @@ -65,7 +65,7 @@ public enum ColorModelType { /** * Whether rendering with this color model is slow. - * In such case, the color model may need to be changed using {@link ColorModelBuilder}. + * In such case, the color model may need to be changed using {@link ColorScaleBuilder}. */ public final boolean isSlow; diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelBuilder.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorScaleBuilder.java similarity index 98% rename from endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelBuilder.java rename to endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorScaleBuilder.java index bede3afd18..d36c7adad2 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorModelBuilder.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorScaleBuilder.java @@ -49,11 +49,11 @@ import org.apache.sis.util.resources.Vocabulary; * Usage: * * <ol> - * <li>Create a new {@link ColorModelBuilder} instance.</li> + * <li>Create a new {@link ColorScaleBuilder} instance.</li> * <li>Invoke one of {@code initialize(…)} methods.</li> * <li>Invoke {@link #createColorModel(int, int, int)}.</li> * <li>Invoke {@link #getSampleToIndexValues()} if this auxiliary information is useful.</li> - * <li>Discards {@code ColorModelBuilder}. Each instance shall be used only once.</li> + * <li>Discards {@code ColorScaleBuilder}. Each instance shall be used only once.</li> * </ol> * * There is no {@code initialize(Raster)} or {@code initialize(RenderedImage)} method because if those methods @@ -67,7 +67,7 @@ import org.apache.sis.util.resources.Vocabulary; * @see ColorModelType * @see ColorModelFactory#createColorModel(int, int, int) */ -public final class ColorModelBuilder { +public final class ColorScaleBuilder { /** * A color model constant set to {@code null}, used for identifying code that explicitly set the * color model to {@code null}. It may happen when no {@code initialize(…)} method can be applied. @@ -108,7 +108,7 @@ public final class ColorModelBuilder { /** * Applies a gray scale to quantitative category and transparent colors to qualitative categories. - * This is a possible argument for the {@link #ColorModelBuilder(Function, ColorModel, boolean)} constructor. + * This is a possible argument for the {@link #ColorScaleBuilder(Function, ColorModel, boolean)} constructor. */ public static final Function<Category,Color[]> GRAYSCALE = (category) -> category.isQuantitative() ? new Color[] {Color.BLACK, Color.WHITE} : null; @@ -171,7 +171,7 @@ public final class ColorModelBuilder { /** * Creates a new colorizer which will apply colors on the given ranges of values in source image. - * The {@code ColorModelBuilder} is considered initialized after this constructor; + * The {@code ColorScaleBuilder} is considered initialized after this constructor; * callers shall <strong>not</strong> invoke an {@code initialize(…)} method. * * <p>The {@code colors} map shall not be null or empty but may contain {@code null} values. @@ -186,7 +186,7 @@ public final class ColorModelBuilder { * @param inherited the colors to use as fallback if some ranges have undefined colors, or {@code null}. * Should be non-null only for styling an exiting image before visualization. */ - public ColorModelBuilder(final Collection<Map.Entry<NumberRange<?>,Color[]>> colors, final ColorModel inherited) { + public ColorScaleBuilder(final Collection<Map.Entry<NumberRange<?>,Color[]>> colors, final ColorModel inherited) { entries = ColorsForRange.list(colors, inherited); inheritedColors = inherited; this.colors = GRAYSCALE; @@ -215,7 +215,7 @@ public final class ColorModelBuilder { * Should be non-null only for styling an exiting image before visualization. * @param compact Whether to rescale the range of sample values to the {@link #TYPE_COMPACT} range. */ - public ColorModelBuilder(final Function<Category,Color[]> colors, final ColorModel inherited, final boolean compact) { + public ColorScaleBuilder(final Function<Category,Color[]> colors, final ColorModel inherited, final boolean compact) { this.colors = (colors != null) ? colors : GRAYSCALE; inheritedColors = inherited; this.compact = compact; @@ -317,7 +317,7 @@ public final class ColorModelBuilder { /** * Uses the given color model for mapping range of values to new colors. The colors in the given color model - * are ignored (because they will be replaced by colors specified by this {@code ColorModelBuilder}); + * are ignored (because they will be replaced by colors specified by this {@code ColorScaleBuilder}); * only the range of values will be fetched, if such range exists. * * @param source the color model from which to get a range of values, or {@code null}. @@ -499,7 +499,7 @@ public final class ColorModelBuilder { ColorsForRange[] entries = this.entries; reuse: if (source != null) { target = source.forConvertedValues(false); - if (target.getSampleRange().filter(ColorModelBuilder::isAlreadyScaled).isPresent()) { + if (target.getSampleRange().filter(ColorScaleBuilder::isAlreadyScaled).isPresent()) { /* * If we enter in this block, all sample values are already in the [0 … 255] range. * If in addition there is no conversion to apply, then there is nothing to do. @@ -694,7 +694,7 @@ reuse: if (source != null) { */ public MathTransform1D getSampleToIndexValues() throws NoninvertibleTransformException { checkInitializationStatus(true); - return (target != null) ? target.getTransferFunction().orElseGet(ColorModelBuilder::identity).inverse() : identity(); + return (target != null) ? target.getTransferFunction().orElseGet(ColorScaleBuilder::identity).inverse() : identity(); } /** diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorsForRange.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorsForRange.java index a393e3a9c2..dddd4b61a5 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorsForRange.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/coverage/privy/ColorsForRange.java @@ -48,7 +48,7 @@ final class ColorsForRange implements Comparable<ColorsForRange> { /** * The range of sample values on which the colors will be applied. Shall never be null. - * May be updated after {@link ColorModelBuilder#compact()} mapped range of floating + * May be updated after {@link ColorScaleBuilder#compact()} mapped range of floating * point values to range of {@link IndexColorModel} values. */ NumberRange<?> sampleRange; @@ -79,7 +79,7 @@ final class ColorsForRange implements Comparable<ColorsForRange> { * because the meaning of pixel values (i.e. the sample dimensions) may be different. * * @see #originalSampleRange - * @see ColorModelBuilder#inheritedColors + * @see ColorScaleBuilder#inheritedColors */ private final ColorModel inheritedColors; @@ -131,7 +131,7 @@ final class ColorsForRange implements Comparable<ColorsForRange> { * Note that "undefined" is not the same as fully transparent color. * * <p>If no colors were explicitly defined but a fallback exists, then this method considers - * this range as defined for allowing {@link ColorModelBuilder} to inherit those colors with + * this range as defined for allowing {@link ColorScaleBuilder} to inherit those colors with * the range of values specified by {@link #originalSampleRange}. We conceptually accept any * {@link #inheritedColors} even if {@link #toARGB(int)} cannot handle all of them.</p> */ diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/BandedSampleConverter.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/BandedSampleConverter.java index b8d5d4d5ed..43153dfab3 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/BandedSampleConverter.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/BandedSampleConverter.java @@ -36,7 +36,7 @@ import org.apache.sis.coverage.privy.ImageLayout; import org.apache.sis.coverage.privy.ImageUtilities; import org.apache.sis.coverage.privy.TileOpExecutor; import org.apache.sis.coverage.privy.SampleDimensions; -import org.apache.sis.coverage.privy.ColorModelBuilder; +import org.apache.sis.coverage.privy.ColorScaleBuilder; import org.apache.sis.util.Numbers; import org.apache.sis.util.Disposable; import org.apache.sis.util.privy.UnmodifiableArrayList; @@ -219,7 +219,7 @@ class BandedSampleConverter extends WritableComputedImage { final BandedSampleModel sampleModel = layout.createBandedSampleModel(targetType, numBands, source, null, 0); final SampleDimension[] sampleDimensions = SampleDimensions.IMAGE_PROCESSOR_ARGUMENT.get(); final int visibleBand = ImageUtilities.getVisibleBand(source); - ColorModel colorModel = ColorModelBuilder.NULL_COLOR_MODEL; + ColorModel colorModel = ColorScaleBuilder.NULL_COLOR_MODEL; if (colorizer != null) { var target = new Colorizer.Target(sampleModel, UnmodifiableArrayList.wrap(sampleDimensions), visibleBand); colorModel = colorizer.apply(target).orElse(null); @@ -234,7 +234,7 @@ class BandedSampleConverter extends WritableComputedImage { if (sampleDimensions != null && visibleBand >= 0 && visibleBand < sampleDimensions.length) { sd = sampleDimensions[visibleBand]; } - final var builder = new ColorModelBuilder(ColorModelBuilder.GRAYSCALE, null, false); + final var builder = new ColorScaleBuilder(ColorScaleBuilder.GRAYSCALE, null, false); if (builder.initialize(source.getSampleModel(), sd) || builder.initialize(source.getColorModel())) { diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/Colorizer.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/Colorizer.java index e8e2c005bb..82ae3baa77 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/Colorizer.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/Colorizer.java @@ -31,7 +31,7 @@ import java.awt.image.IndexColorModel; import java.awt.image.RenderedImage; import org.apache.sis.coverage.Category; import org.apache.sis.coverage.SampleDimension; -import org.apache.sis.coverage.privy.ColorModelBuilder; +import org.apache.sis.coverage.privy.ColorScaleBuilder; import org.apache.sis.coverage.privy.ColorModelFactory; import org.apache.sis.measure.NumberRange; import org.apache.sis.util.ArgumentChecks; @@ -292,7 +292,7 @@ public interface Colorizer extends Function<Colorizer.Target, Optional<ColorMode final List<SampleDimension> ranges = target.getRanges().orElse(null); if (visibleBand < ranges.size()) { final SampleModel model = target.getSampleModel(); - final var c = new ColorModelBuilder(colors, null, false); + final var c = new ColorScaleBuilder(colors, null, false); if (c.initialize(model, ranges.get(visibleBand))) { return Optional.ofNullable(c.createColorModel(model.getDataType(), model.getNumBands(), visibleBand)); } diff --git a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/Visualization.java b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/Visualization.java index d4dadc3842..ab61c53dfd 100644 --- a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/Visualization.java +++ b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/image/Visualization.java @@ -44,7 +44,7 @@ import org.apache.sis.coverage.internal.CompoundTransform; import org.apache.sis.coverage.privy.ImageLayout; import org.apache.sis.coverage.privy.ImageUtilities; import org.apache.sis.coverage.privy.SampleDimensions; -import org.apache.sis.coverage.privy.ColorModelBuilder; +import org.apache.sis.coverage.privy.ColorScaleBuilder; import org.apache.sis.feature.internal.Resources; import org.apache.sis.measure.NumberRange; import org.apache.sis.math.Statistics; @@ -268,7 +268,7 @@ final class Visualization extends ResampledImage { * The sample model is a mandatory argument before we invoke user supplied colorizer, * which must be done before to build the color model. */ - sampleModel = layout.createBandedSampleModel(ColorModelBuilder.TYPE_COMPACT, NUM_BANDS, source, bounds, 0); + sampleModel = layout.createBandedSampleModel(ColorScaleBuilder.TYPE_COMPACT, NUM_BANDS, source, bounds, 0); final Target target = new Target(sampleModel, VISIBLE_BAND, visibleSD != null); if (colorizer != null) { colorModel = colorizer.apply(target).orElse(null); @@ -276,7 +276,7 @@ final class Visualization extends ResampledImage { final SampleModel sourceSM = coloredSource.getSampleModel(); final ColorModel sourceCM = coloredSource.getColorModel(); /* - * Get a `ColorModelBuilder` which will compute the `ColorModel` of destination image. + * Get a `ColorScaleBuilder` which will compute the `ColorModel` of destination image. * There is different ways to setup the builder, depending on which `Colorizer` is used. * In precedence order: * @@ -285,20 +285,20 @@ final class Visualization extends ResampledImage { * - statistics */ boolean initialized; - final ColorModelBuilder builder; + final ColorScaleBuilder builder; if (target.rangeColors != null) { - builder = new ColorModelBuilder(target.rangeColors, sourceCM); + builder = new ColorScaleBuilder(target.rangeColors, sourceCM); initialized = true; } else { /* * Ranges of sample values were not specified explicitly. Instead, we will try to infer them * in various ways: sample dimensions, scaled color model, or image statistics in last resort. */ - builder = new ColorModelBuilder(target.categoryColors, sourceCM, true); + builder = new ColorScaleBuilder(target.categoryColors, sourceCM, true); initialized = builder.initialize(sourceSM, visibleSD); if (initialized) { /* - * If we have been able to configure ColorModelBuilder using SampleDimension, apply an adjustment + * If we have been able to configure ColorScaleBuilder using SampleDimension, apply an adjustment * based on the ScaledColorModel if it exists. Use case: image is created with an IndexColorModel * determined by the SampleModel, then user enhanced contrast by a call to `stretchColorRamp(…)`. * We want to preserve that contrast enhancement. @@ -325,7 +325,7 @@ final class Visualization extends ResampledImage { } if (!initialized) { /* - * If none of above `ColorModelBuilder` configurations worked, use statistics in last resort. + * If none of above `ColorScaleBuilder` configurations worked, use statistics in last resort. * We do that after we reduced the image to a single band in order to reduce the amount of calculation. */ final DoubleUnaryOperator[] sampleFilters = SampleDimensions.toSampleFilters(visibleSD); @@ -333,7 +333,7 @@ final class Visualization extends ResampledImage { builder.initialize(statistics.minimum(), statistics.maximum(), sourceSM.getDataType()); } if (colorModel == null) { - colorModel = builder.createColorModel(ColorModelBuilder.TYPE_COMPACT, NUM_BANDS, VISIBLE_BAND); + colorModel = builder.createColorModel(ColorScaleBuilder.TYPE_COMPACT, NUM_BANDS, VISIBLE_BAND); } converters = new MathTransform1D[] { builder.getSampleToIndexValues() // Must be after `createColorModel(…)`. diff --git a/endorsed/src/org.apache.sis.feature/test/org/apache/sis/coverage/privy/ColorModelBuilderTest.java b/endorsed/src/org.apache.sis.feature/test/org/apache/sis/coverage/privy/ColorModelBuilderTest.java index 58de890f2f..f14aac7103 100644 --- a/endorsed/src/org.apache.sis.feature/test/org/apache/sis/coverage/privy/ColorModelBuilderTest.java +++ b/endorsed/src/org.apache.sis.feature/test/org/apache/sis/coverage/privy/ColorModelBuilderTest.java @@ -35,7 +35,7 @@ import org.apache.sis.test.TestCase; /** - * Tests {@link ColorModelBuilder}. + * Tests {@link ColorScaleBuilder}. * * @author Martin Desruisseaux (Geomatys) */ @@ -53,7 +53,7 @@ public final class ColorModelBuilderTest extends TestCase { */ @Test public void testRangeAndColors() throws TransformException { - final ColorModelBuilder colorizer = new ColorModelBuilder(List.of( + final ColorScaleBuilder colorizer = new ColorScaleBuilder(List.of( new SimpleEntry<>(NumberRange.create(0, true, 0, true), new Color[] {Color.GRAY}), new SimpleEntry<>(NumberRange.create(1, true, 1, true), new Color[] {ColorModelFactory.TRANSPARENT}), new SimpleEntry<>(NumberRange.create(2, true, 15, true), new Color[] {Color.BLUE, Color.WHITE, Color.RED})), null); @@ -102,9 +102,9 @@ public final class ColorModelBuilderTest extends TestCase { .addQualitative ("Error", MathFunctions.toNanFloat(3)) .setName("Temperature").build(); - final ColorModelBuilder colorizer = new ColorModelBuilder(ColorModelBuilder.GRAYSCALE, null, true); + final ColorScaleBuilder colorizer = new ColorScaleBuilder(ColorScaleBuilder.GRAYSCALE, null, true); assertTrue(colorizer.initialize(null, sd)); - final var cm = (IndexColorModel) colorizer.createColorModel(ColorModelBuilder.TYPE_COMPACT, 1, 0); // Must be first. + final var cm = (IndexColorModel) colorizer.createColorModel(ColorScaleBuilder.TYPE_COMPACT, 1, 0); // Must be first. /* * Test conversion of a few sample values to packed values. */ diff --git a/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/map/coverage/RenderingData.java b/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/map/coverage/RenderingData.java index fa556b2ce5..3861ce565d 100644 --- a/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/map/coverage/RenderingData.java +++ b/endorsed/src/org.apache.sis.portrayal/main/org/apache/sis/map/coverage/RenderingData.java @@ -654,8 +654,8 @@ public class RenderingData implements CloneAccess { * that we can use with `IndexColorModel`. The two operations (resampling and conversions) are * combined in a single "visualization" operation of efficiency. * - * TODO: if `colors` is null, instead of defaulting to `ColorModelBuilder.GRAYSCALE` we should get the colors - * from the current ColorModel. This work should be done in `ColorModelBuilder` by converting the ranges + * TODO: if `colors` is null, instead of defaulting to `ColorScaleBuilder.GRAYSCALE` we should get the colors + * from the current ColorModel. This work should be done in `ColorScaleBuilder` by converting the ranges * of sample values in source image to ranges of sample values in destination image, then query * ColorModel.getRGB(Object) for increasing integer values in that range. */