package org.geotools.coverage.io.range.impl; import java.awt.color.ColorSpace; import java.awt.image.ColorModel; import java.awt.image.RenderedImage; import java.awt.image.SampleModel; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.imageio.ImageTypeSpecifier; import javax.media.jai.IHSColorSpace; import org.geotools.coverage.TypeMap; import org.geotools.coverage.io.range.RangeAxis; import org.geotools.coverage.io.range.RangeAxis.DimensionlessAxis; import org.geotools.coverage.io.range.RangeAxisBin.StringAxisBin; import org.geotools.coverage.io.range.Band.BandKey; import org.geotools.feature.NameImpl; import org.geotools.util.SimpleInternationalString; import org.opengis.coverage.ColorInterpretation; /** * Process Color is a subtractive model used when working with pigment. This * model is often used when printing. * <p> * This is a normal Java 5 enum capturing the closed set of CMYK names. It is * used as a basis for the definition of an RangeAxis built around these constants. * <p> * Please understand that this is not the only possible subtractive color model * - a commercial alternative is the Pantone (tm)) colors. * */ @SuppressWarnings("deprecation") public enum IMAGE_BAND_UTILITIES{ X { @Override public StringAxisBin getAxisBin() { return X_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, Y { @Override public StringAxisBin getAxisBin() { return Y_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, Z { @Override public StringAxisBin getAxisBin() { return Z_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, A { @Override public StringAxisBin getAxisBin() { return A_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, B { @Override public StringAxisBin getAxisBin() { return B_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, LIGHTNESS { @Override public StringAxisBin getAxisBin() { return LIGHTNESS_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, U { @Override public StringAxisBin getAxisBin() { return U_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, V { @Override public StringAxisBin getAxisBin() { return V_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, LUMA { @Override public StringAxisBin getAxisBin() { return LUMA_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, CHROMA_A { @Override public StringAxisBin getAxisBin() { return CHROMA_A_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, CHROMA_B { @Override public StringAxisBin getAxisBin() { return CHROMA_B_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, INTENSITY { @Override public StringAxisBin getAxisBin() { return INTENSITY_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, ALPHA { @Override public StringAxisBin getAxisBin() { return ALPHA_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, GRAY { @Override public StringAxisBin getAxisBin() { return GRAY_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, UNDEFINED { @Override public StringAxisBin getAxisBin() { return UNDEFINED_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, PALETTE { @Override public StringAxisBin getAxisBin() { return PALETTE_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, BLUE { @Override public StringAxisBin getAxisBin() { return BLUE_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, GREEN { @Override public StringAxisBin getAxisBin() { return GREEN_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, RED { @Override public StringAxisBin getAxisBin() { return RED_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, VALUE { @Override public StringAxisBin getAxisBin() { return SATURATION_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, SATURATION { @Override public StringAxisBin getAxisBin() { return SATURATION_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, HUE { @Override public StringAxisBin getAxisBin() { return HUE_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, CYAN { @Override public StringAxisBin getAxisBin() { return CYAN_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, MAGENTA { @Override public StringAxisBin getAxisBin() { return MAGENTA_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, YELLOW { @Override public StringAxisBin getAxisBin() { return YELLOW_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }, KEY { @Override public StringAxisBin getAxisBin() { return KEY_BIN; } @Override public BandKey getBandKeys() { return new BandKey(Arrays.asList(getAxisBin())); } }; /** * Specific axis for controlling bins that looks up photographic bands, like RGB, CMYK, HSV, etc... */ public static final RangeAxis PHOTOGRAPHIC_BANDS_AXIS= new DimensionlessAxis("SyntheticColorAxis" ); private static final StringAxisBin KEY_BIN = new StringAxisBin( new NameImpl("BLACK"), new SimpleInternationalString("BLACK bin"), PHOTOGRAPHIC_BANDS_AXIS, "BLACK"); private static final StringAxisBin YELLOW_BIN = new StringAxisBin( new NameImpl("YELLOW"), new SimpleInternationalString("YELLOW bin"), PHOTOGRAPHIC_BANDS_AXIS, "YELLOW"); private static final StringAxisBin MAGENTA_BIN = new StringAxisBin( new NameImpl("MAGENTA"), new SimpleInternationalString("Magenta bin"), PHOTOGRAPHIC_BANDS_AXIS, "MAGENTA"); private static final StringAxisBin CYAN_BIN = new StringAxisBin( new NameImpl("CYAN"), new SimpleInternationalString("CYAN bin"), PHOTOGRAPHIC_BANDS_AXIS, "CYAN"); private static final StringAxisBin HUE_BIN = new StringAxisBin( new NameImpl("HUE"), new SimpleInternationalString("HUE bin"), PHOTOGRAPHIC_BANDS_AXIS, "HUE"); private static final StringAxisBin SATURATION_BIN = new StringAxisBin( new NameImpl("SATURATION"), new SimpleInternationalString("SATURATION bin"), PHOTOGRAPHIC_BANDS_AXIS, "SATURATION"); private static final StringAxisBin GREEN_BIN = new StringAxisBin( new NameImpl("RED"), new SimpleInternationalString("RED bin"), PHOTOGRAPHIC_BANDS_AXIS, "RED"); private static final StringAxisBin BLUE_BIN = new StringAxisBin( new NameImpl("BLUE"), new SimpleInternationalString("BLUE bin"), PHOTOGRAPHIC_BANDS_AXIS, "BLUE"); private static final StringAxisBin RED_BIN = GREEN_BIN; private static final StringAxisBin PALETTE_BIN = new StringAxisBin( new NameImpl("VALUE"), new SimpleInternationalString("VALUE bin"), PHOTOGRAPHIC_BANDS_AXIS, "VALUE"); private static final StringAxisBin UNDEFINED_BIN = new StringAxisBin( new NameImpl("UNDEFINED"), new SimpleInternationalString("UNDEFINED bin"), PHOTOGRAPHIC_BANDS_AXIS, "UNDEFINED"); private static final StringAxisBin GRAY_BIN = new StringAxisBin( new NameImpl("GRAY"), new SimpleInternationalString("GRAY bin"), PHOTOGRAPHIC_BANDS_AXIS, "GRAY"); private static final StringAxisBin ALPHA_BIN = new StringAxisBin( new NameImpl("ALPHA"), new SimpleInternationalString("ALPHA bin"), PHOTOGRAPHIC_BANDS_AXIS, "ALPHA"); private static final StringAxisBin INTENSITY_BIN = new StringAxisBin( new NameImpl("INTENSITY"), new SimpleInternationalString("INTENSITY bin"), PHOTOGRAPHIC_BANDS_AXIS, "INTENSITY"); private static final StringAxisBin CHROMA_B_BIN = new StringAxisBin( new NameImpl("CHROMA-B"), new SimpleInternationalString("CHROMA-B bin"), PHOTOGRAPHIC_BANDS_AXIS, "CHROMA-B"); private static final StringAxisBin CHROMA_A_BIN = new StringAxisBin( new NameImpl("CHROMA-A"), new SimpleInternationalString("CHROMA-A bin"), PHOTOGRAPHIC_BANDS_AXIS, "CHROMA-A"); private static final StringAxisBin LUMA_BIN = new StringAxisBin( new NameImpl("LUMA"), new SimpleInternationalString("LUMA bin"), PHOTOGRAPHIC_BANDS_AXIS, "LUMA"); private static final StringAxisBin V_BIN = new StringAxisBin( new NameImpl("V"), new SimpleInternationalString("V bin"), PHOTOGRAPHIC_BANDS_AXIS, "V"); private static final StringAxisBin U_BIN = new StringAxisBin( new NameImpl("U"), new SimpleInternationalString("U bin"), PHOTOGRAPHIC_BANDS_AXIS, "U"); private static final StringAxisBin LIGHTNESS_BIN = new StringAxisBin( new NameImpl("LIGHTNESS"), new SimpleInternationalString("LIGHTNESS bin"), PHOTOGRAPHIC_BANDS_AXIS, "LIGHTNESS"); private static final StringAxisBin B_BIN = new StringAxisBin( new NameImpl("B"), new SimpleInternationalString("B bin"), PHOTOGRAPHIC_BANDS_AXIS, "B"); private static final StringAxisBin A_BIN = new StringAxisBin( new NameImpl("A"), new SimpleInternationalString("A bin"), PHOTOGRAPHIC_BANDS_AXIS, "A"); private static final StringAxisBin Z_BIN = new StringAxisBin( new NameImpl("Z"), new SimpleInternationalString("Z bin"), PHOTOGRAPHIC_BANDS_AXIS, "Z"); private static final StringAxisBin Y_BIN = new StringAxisBin( new NameImpl("Y"), new SimpleInternationalString("Y bin"), PHOTOGRAPHIC_BANDS_AXIS, "Y"); public abstract StringAxisBin getAxisBin(); public abstract BandKey getBandKeys(); public static List<StringAxisBin> getBinsFromRenderedImage(final ColorModel cm, final SampleModel sm){ if(cm==null) throw new IllegalArgumentException("Provided input image with null color model"); if(sm==null) throw new IllegalArgumentException("Provided input image with null SampleModel"); //get the color interpretation for the three bands final ColorInterpretation firstBandCI = TypeMap.getColorInterpretation(cm, 0); // CMY - CMYK if(firstBandCI==ColorInterpretation.CYAN_BAND) { if(sm.getNumBands()==3) { return Arrays.asList( IMAGE_BAND_UTILITIES.CYAN.getAxisBin(), IMAGE_BAND_UTILITIES.MAGENTA.getAxisBin(), IMAGE_BAND_UTILITIES.YELLOW.getAxisBin() ); } else { return Arrays.asList( IMAGE_BAND_UTILITIES.CYAN.getAxisBin(), IMAGE_BAND_UTILITIES.MAGENTA.getAxisBin(), IMAGE_BAND_UTILITIES.YELLOW.getAxisBin(), IMAGE_BAND_UTILITIES.KEY.getAxisBin() ); } } // HSV if(firstBandCI==ColorInterpretation.HUE_BAND) { return Collections.singletonList(IMAGE_BAND_UTILITIES.HUE.getAxisBin()); } //RGBA if(firstBandCI==ColorInterpretation.RED_BAND) { if(sm.getNumBands()==3) { return Arrays.asList( IMAGE_BAND_UTILITIES.RED.getAxisBin(), IMAGE_BAND_UTILITIES.GREEN.getAxisBin(), IMAGE_BAND_UTILITIES.BLUE.getAxisBin() ); } else { return Arrays.asList( IMAGE_BAND_UTILITIES.RED.getAxisBin(), IMAGE_BAND_UTILITIES.GREEN.getAxisBin(), IMAGE_BAND_UTILITIES.BLUE.getAxisBin(), IMAGE_BAND_UTILITIES.ALPHA.getAxisBin() ); } } //PALETTE if(firstBandCI==ColorInterpretation.PALETTE_INDEX) return Collections.singletonList(IMAGE_BAND_UTILITIES.PALETTE.getAxisBin()); // GRAY, GRAY+ALPHA if(firstBandCI==ColorInterpretation.GRAY_INDEX) { if(sm.getNumBands()==2) return Arrays.asList( IMAGE_BAND_UTILITIES.GRAY.getAxisBin(), IMAGE_BAND_UTILITIES.ALPHA.getAxisBin() ); else return Arrays.asList( IMAGE_BAND_UTILITIES.GRAY.getAxisBin() ); } final ColorSpace cs = cm.getColorSpace(); //IHS if(cs instanceof IHSColorSpace) return Arrays.asList( IMAGE_BAND_UTILITIES.INTENSITY.getAxisBin(), IMAGE_BAND_UTILITIES.HUE.getAxisBin(), IMAGE_BAND_UTILITIES.SATURATION.getAxisBin() ); //YCbCr, LUV, LAB, HLS, IEXYZ switch(cs.getType()){ case ColorSpace.TYPE_YCbCr: return Arrays.asList( IMAGE_BAND_UTILITIES.LUMA.getAxisBin(), IMAGE_BAND_UTILITIES.CHROMA_A.getAxisBin(), IMAGE_BAND_UTILITIES.CHROMA_B.getAxisBin() ); case ColorSpace.TYPE_Luv: return Arrays.asList( IMAGE_BAND_UTILITIES.LIGHTNESS.getAxisBin(), IMAGE_BAND_UTILITIES.U.getAxisBin(), IMAGE_BAND_UTILITIES.V.getAxisBin() ); case ColorSpace.TYPE_Lab: return Arrays.asList( IMAGE_BAND_UTILITIES.LIGHTNESS.getAxisBin(), IMAGE_BAND_UTILITIES.A.getAxisBin(), IMAGE_BAND_UTILITIES.B.getAxisBin() ); case ColorSpace.TYPE_HLS: return Arrays.asList( IMAGE_BAND_UTILITIES.HUE.getAxisBin(), IMAGE_BAND_UTILITIES.LIGHTNESS.getAxisBin(), IMAGE_BAND_UTILITIES.SATURATION.getAxisBin() ); case ColorSpace.CS_CIEXYZ: return Arrays.asList( IMAGE_BAND_UTILITIES.X.getAxisBin(), IMAGE_BAND_UTILITIES.Y.getAxisBin(), IMAGE_BAND_UTILITIES.Z.getAxisBin() ); default: return null; } } /** * Helper classes for creating {@link DimensionlessAxis} for the most common color models' bands. * * <p> * Suypported colorspaces incluse RGBA, GRAY, GRAYA, HSV,HLS, LAB, LUV, IHS, CI_XYZ, CMY(K). * Notice that RGB is not handled here but through a wavelength axis. * * <p> * This method returns null if an unsupported {@link ColorModel} is provided. * * @param raster a {@link RenderedImage} implementation from which to extract needed info, usually {@link ColorModel} and {@link SampleModel}. * @return a {@link DimensionlessAxis} or null if an unsupported {@link ColorModel} is provided. */ public static List<StringAxisBin> getBinsFromRenderedImage(final RenderedImage raster){ if(raster==null) throw new NullPointerException("Provided null input image"); final ColorModel cm= raster.getColorModel(); if(cm==null) throw new IllegalArgumentException("Provided input image with null color model"); final SampleModel sm= raster.getSampleModel(); return getBinsFromRenderedImage(cm, sm); } public static List<StringAxisBin> getBinsFromRenderedImage(final ImageTypeSpecifier it){ if(it==null) throw new NullPointerException("Provided null input ImageTypeSpecifier"); final ColorModel cm= it.getColorModel(); if(cm==null) throw new IllegalArgumentException("Provided input image with null color model"); final SampleModel sm= it.getSampleModel(); return getBinsFromRenderedImage(cm, sm); } // // public static RangeDescriptor<String,Dimensionless> getFieldTypeFromRenderedImage(final RenderedImage raster){ // if(raster==null) // throw new NullPointerException("Provided null input image"); // // final ColorModel cm= raster.getColorModel(); // if(cm==null) // throw new IllegalArgumentException("Provided input image with null color model"); // final SampleModel sm= raster.getSampleModel(); // if(sm==null) // throw new IllegalArgumentException("Provided input image with null SampleModel"); // // //get the color interpretation for the three bands // final ColorInterpretation firstBandCI = TypeMap.getColorInterpretation(cm, 0); // // // get axis for this fieldtype and prepare the map for the band type // final HashMap<BandKey, BandDescriptor> bands= new HashMap<BandKey<String,Dimensionless>, BandDescriptor>(); // // // // CMY - CMYK // if(firstBandCI==ColorInterpretation.CYAN_BAND) // { // if(sm.getNumBands()==3) // { // bands.put(IMAGE_BAND_UTILITIES.CYAN.getBandKey(), IMAGE_BAND_UTILITIES.CYAN.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.MAGENTA.getBandKey(), IMAGE_BAND_UTILITIES.MAGENTA.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.YELLOW.getBandKey(), IMAGE_BAND_UTILITIES.YELLOW.getBandType()); // } // else // { // bands.put(IMAGE_BAND_UTILITIES.CYAN.getBandKey(), IMAGE_BAND_UTILITIES.CYAN.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.MAGENTA.getBandKey(), IMAGE_BAND_UTILITIES.MAGENTA.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.YELLOW.getBandKey(), IMAGE_BAND_UTILITIES.YELLOW.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.KEY.getBandKey(), IMAGE_BAND_UTILITIES.KEY.getBandType()); // // } // } // // // HSV // if(firstBandCI==ColorInterpretation.HUE_BAND) // { // bands.put(IMAGE_BAND_UTILITIES.HUE.getBandKey(), IMAGE_BAND_UTILITIES.HUE.getBandType()); // } // // //RGB(A) // if(firstBandCI==ColorInterpretation.RED_BAND) // { // if(sm.getNumBands()==3) // { // bands.put(IMAGE_BAND_UTILITIES.RED.getBandKey(), IMAGE_BAND_UTILITIES.RED.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.GREEN.getBandKey(), IMAGE_BAND_UTILITIES.GREEN.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.BLUE.getBandKey(), IMAGE_BAND_UTILITIES.BLUE.getBandType()); // } // else // { // bands.put(IMAGE_BAND_UTILITIES.RED.getBandKey(), IMAGE_BAND_UTILITIES.RED.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.GREEN.getBandKey(), IMAGE_BAND_UTILITIES.GREEN.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.BLUE.getBandKey(), IMAGE_BAND_UTILITIES.BLUE.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.ALPHA.getBandKey(), IMAGE_BAND_UTILITIES.ALPHA.getBandType()); // // } // } // // //PALETTE // if(firstBandCI==ColorInterpretation.PALETTE_INDEX) // { // bands.put(IMAGE_BAND_UTILITIES.PALETTE.getBandKey(), IMAGE_BAND_UTILITIES.PALETTE.getBandType()); // } // // // GRAY, GRAY+ALPHA // if(firstBandCI==ColorInterpretation.GRAY_INDEX) // { // if(sm.getNumBands()==2) // { // // bands.put(IMAGE_BAND_UTILITIES.GRAY.getBandKey(), IMAGE_BAND_UTILITIES.GRAY.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.ALPHA.getBandKey(), IMAGE_BAND_UTILITIES.ALPHA.getBandType()); // } // else // bands.put(IMAGE_BAND_UTILITIES.GRAY.getBandKey(), IMAGE_BAND_UTILITIES.GRAY.getBandType()); // // } // // // final ColorSpace cs = cm.getColorSpace(); // //IHS // if(cs instanceof IHSColorSpace){ // bands.put(IMAGE_BAND_UTILITIES.INTENSITY.getBandKey(), IMAGE_BAND_UTILITIES.INTENSITY.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.HUE.getBandKey(), IMAGE_BAND_UTILITIES.HUE.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.SATURATION.getBandKey(), IMAGE_BAND_UTILITIES.SATURATION.getBandType()); // } // // if(bands.isEmpty()){ // //YCbCr, LUV, LAB, HLS, IEXYZ // switch(cs.getType()){ // case ColorSpace.TYPE_YCbCr: // bands.put(IMAGE_BAND_UTILITIES.LUMA.getBandKey(), IMAGE_BAND_UTILITIES.LUMA.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.CHROMA_A.getBandKey(), IMAGE_BAND_UTILITIES.CHROMA_A.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.CHROMA_B.getBandKey(), IMAGE_BAND_UTILITIES.CHROMA_B.getBandType()); // break; // // case ColorSpace.TYPE_Luv: // bands.put(IMAGE_BAND_UTILITIES.LIGHTNESS.getBandKey(), IMAGE_BAND_UTILITIES.LIGHTNESS.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.U.getBandKey(), IMAGE_BAND_UTILITIES.U.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.V.getBandKey(), IMAGE_BAND_UTILITIES.V.getBandType()); // break; // // case ColorSpace.TYPE_Lab: // bands.put(IMAGE_BAND_UTILITIES.LIGHTNESS.getBandKey(), IMAGE_BAND_UTILITIES.LIGHTNESS.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.A.getBandKey(), IMAGE_BAND_UTILITIES.A.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.B.getBandKey(), IMAGE_BAND_UTILITIES.B.getBandType()); // break; // // case ColorSpace.TYPE_HLS: // bands.put(IMAGE_BAND_UTILITIES.HUE.getBandKey(), IMAGE_BAND_UTILITIES.HUE.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.LIGHTNESS.getBandKey(), IMAGE_BAND_UTILITIES.LIGHTNESS.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.SATURATION.getBandKey(), IMAGE_BAND_UTILITIES.SATURATION.getBandType()); // break; // case ColorSpace.CS_CIEXYZ: // bands.put(IMAGE_BAND_UTILITIES.X.getBandKey(), IMAGE_BAND_UTILITIES.X.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.Y.getBandKey(), IMAGE_BAND_UTILITIES.Y.getBandType()); // bands.put(IMAGE_BAND_UTILITIES.Z.getBandKey(), IMAGE_BAND_UTILITIES.Z.getBandType()); // break; // // default: // throw new IllegalArgumentException("Unable to create RangeDescriptor for this rendered image"); // // } // } // //build the field type // return new RangeDescriptor<String, Dimensionless>( // new NameImpl("RenderedImageFieldType"), // new SimpleInternationalString("RangeDescriptor for rendered image"), // Unit.ONE, // band); // } private final static StringAxisBin X_BIN=new StringAxisBin( new NameImpl("X"), new SimpleInternationalString("X bin"), PHOTOGRAPHIC_BANDS_AXIS, "X"); }