/// <summary> /// Applies the Stretch colorizer to the basic raster layer. /// </summary> /// <param name="basicRasterLayer">The basic raster layer is either a raster or image service layer, or the image sub-layer of the mosaic layer.</param> /// <returns></returns> public static async Task SetToStretchColorizer(BasicRasterLayer basicRasterLayer) { // Defines parameters in colorizer definition. int bandIndex = 0; RasterStretchType stretchType = RasterStretchType.MinimumMaximum; double gamma = 2.0; string colorRampStyle = "ArcGIS Colors"; string colorRampName = "Aspect"; await QueuedTask.Run(async() => { // Gets a color ramp from a style. IList <ColorRampStyleItem> rampList = GetColorRampsFromStyleAsync(Project.Current, colorRampStyle, colorRampName); CIMColorRamp colorRamp = rampList[0].ColorRamp; // Creates a new Stretch Colorizer Definition with defined parameters. StretchColorizerDefinition stretchColorizerDef = new StretchColorizerDefinition(bandIndex, stretchType, gamma, colorRamp); // Creates a new stretch colorizer using the colorizer definition created above. CIMRasterStretchColorizer newColorizer = await basicRasterLayer.CreateColorizerAsync(stretchColorizerDef) as CIMRasterStretchColorizer; // Sets the newly created colorizer on the layer. basicRasterLayer.SetColorizer(newColorizer); }); }
/// <summary> /// Warning! You must call this method on the MCT! /// </summary> /// <returns></returns> private CIMRasterStretchColorizer CreateStretchRendererFromScratch(double min, double max) { //All of these methods have to be called on the MCT if (Module1.OnUIThread) { throw new CalledOnWrongThreadException(); } var colors = getColors(); var multiPartRamp = new CIMMultipartColorRamp { Weights = new double[colors.GetLength(0)] }; CIMColorRamp[] rampValues = new CIMColorRamp[colors.GetLength(0)]; for (int i = 0; i < colors.GetLength(0) - 1; i++) { var ramp = new CIMPolarContinuousColorRamp(); var r = colors[i, 0]; var g = colors[i, 1]; var b = colors[i, 2]; ramp.FromColor = new CIMRGBColor() { R = r, G = g, B = b }; r = colors[i + 1, 0]; g = colors[i + 1, 1]; b = colors[i + 1, 2]; ramp.ToColor = new CIMRGBColor() { R = r, G = g, B = b }; ramp.PolarDirection = PolarDirection.Clockwise; rampValues[i] = ramp; multiPartRamp.Weights[i] = 1; } multiPartRamp.Weights[colors.GetLength(0) - 1] = 1; multiPartRamp.ColorRamps = rampValues; var colorizer = new CIMRasterStretchColorizer { ColorRamp = multiPartRamp, StretchType = RasterStretchType.StandardDeviations, StandardDeviationParam = 2, // in order to see the label on the layer we must add at least three values StretchClasses = new CIMRasterStretchClass[3] }; colorizer.StretchClasses[0] = new CIMRasterStretchClass() { Value = min, Label = min.ToString() }; colorizer.StretchClasses[1] = new CIMRasterStretchClass() { Value = max / 2 }; colorizer.StretchClasses[2] = new CIMRasterStretchClass() { Value = max, Label = max.ToString() }; return(colorizer); }