/// <summary> /// 根据单波段拉伸渲染 /// </summary> /// <param name="rasterDataset">栅格数据集</param> /// <param name="graypos">第几波段</param> /// <param name="stretchType">拉伸方式</param> /// <param name="pFromColor">fromColor</param> /// <param name="pToColor">toColor</param> /// <returns></returns> public static IRasterRenderer StretchRenderer(ESRI.ArcGIS.Geodatabase.IRasterDataset rasterDataset, int graypos, esriRasterStretchTypesEnum stretchType, IRgbColor pFromColor, IRgbColor pToColor) { try { //Create the color ramp. IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRampClass(); colorRamp.Size = 255; colorRamp.FromColor = pFromColor; colorRamp.ToColor = pToColor; bool createColorRamp; colorRamp.CreateRamp(out createColorRamp); //Create a stretch renderer. IRasterStretchColorRampRenderer stretchRenderer = new RasterStretchColorRampRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)stretchRenderer; //Set the renderer properties. IRaster raster = rasterDataset.CreateDefaultRaster(); rasterRenderer.Raster = raster; rasterRenderer.Update(); stretchRenderer.BandIndex = graypos; stretchRenderer.ColorRamp = colorRamp; //Set the stretch type. IRasterStretch pRasterStretch = (IRasterStretch)rasterRenderer; pRasterStretch.StretchType = stretchType; pRasterStretch.StandardDeviationsParam = 2; return(rasterRenderer); } catch { return(null); } }
private void StretchRender() { if (comboBoxBand.SelectedItem == null) { MessageBox.Show("波段不能为空!"); return; } IColorRamp pColorRamp = (IColorRamp)EnumStyleItem[comboBoxColor.SelectedIndex]; IRasterLayer pRasterLayr = m_layer as IRasterLayer; IRasterStretchColorRampRenderer pStretchRenderer = new RasterStretchColorRampRendererClass(); IRasterRenderer pRasterRenderer = (IRasterRenderer)pStretchRenderer; IRaster pRaster = pRasterLayr.Raster; pRasterRenderer.Raster = pRaster; pRasterRenderer.Update(); pStretchRenderer.BandIndex = comboBoxBand.SelectedIndex; pStretchRenderer.ColorRamp = pColorRamp; IRasterStretch pStretchType = (IRasterStretch)pRasterRenderer; pStretchType.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations; pStretchType.StandardDeviationsParam = Convert.ToDouble(textBoxStandardValue.Text); pRasterLayr.Renderer = pRasterRenderer; m_mapControl3.Refresh(); }
public IRasterLayer RasterRenderedLayer(IRasterLayer pRL, bool renderType, int grayBandIndex, int[] rgbBandIndex) { //实例新的栅格图层 IRasterLayer rlayer = new RasterLayerClass(); string fullPath = pRL.FilePath; IRasterDataset rasterDataset = OpenFileRasterDataset(fullPath); //单波段 if (rgbBandIndex == null) { //如果grayBandIndex=-1 try { //定义拉伸颜色条 IRgbColor pFromColor = new RgbColorClass(); pFromColor.Red = this.userControl_Color1.FromColor.R; pFromColor.Green = this.userControl_Color1.FromColor.G; pFromColor.Blue = this.userControl_Color1.FromColor.B; IRgbColor pToColor = new RgbColorClass(); pToColor.Red = this.userControl_Color1.ToColor.R; pToColor.Green = this.userControl_Color1.ToColor.G; pToColor.Blue = this.userControl_Color1.ToColor.B; IRasterRenderer render = null; render = BandCombinationShow.StretchRenderer(rasterDataset, grayBandIndex, this.stretchType, pFromColor, pToColor); rlayer.CreateFromDataset(rasterDataset); rlayer.Renderer = render as IRasterRenderer; return(rlayer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(null); } } else//多波段显示 { try { //设置彩色合成顺序 生成新的渲染模式 IRasterRGBRenderer render = new RasterRGBRendererClass(); render.RedBandIndex = rgbBandIndex[0]; render.GreenBandIndex = rgbBandIndex[1]; render.BlueBandIndex = rgbBandIndex[2]; IRasterStretch stretchType = (IRasterStretch)render; stretchType.StretchType = this.stretchType; stretchType.StandardDeviationsParam = 2; rlayer.CreateFromDataset(rasterDataset); rlayer.Renderer = render as IRasterRenderer; return(rlayer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(null); } } }
/// <summary> /// 拉伸渲染模式(貌似) /// </summary> /// <param name="rasterDataset"></param> /// <returns></returns> private static IRasterRenderer StretchRenderer(ESRI.ArcGIS.Geodatabase.IRasterDataset rasterDataset, int graypos, int i) { try { //Define the from and to colors for the color ramp. IRgbColor fromColor = new RgbColorClass(); fromColor.Red = 255; fromColor.Green = 0; fromColor.Blue = 0; IColor toColor = new RgbColorClass(); //此处应该是写错了 fromColor.Red = 0; fromColor.Green = 255; fromColor.Blue = 0; //Create the color ramp. IAlgorithmicColorRamp colorRamp = new AlgorithmicColorRampClass(); colorRamp.Size = 255; colorRamp.FromColor = fromColor; colorRamp.ToColor = toColor; bool createColorRamp; colorRamp.CreateRamp(out createColorRamp); //Create a stretch renderer. IRasterStretchColorRampRenderer stretchRenderer = new RasterStretchColorRampRendererClass(); //设置显示对比度和亮度 //((IRasterDisplayProps)stretchRenderer).BrightnessValue = -90; IRasterRenderer rasterRenderer = (IRasterRenderer)stretchRenderer; //Set the renderer properties. IRaster raster = rasterDataset.CreateDefaultRaster(); rasterRenderer.Raster = raster; rasterRenderer.Update(); stretchRenderer.BandIndex = graypos; //stretchRenderer.ColorRamp = colorRamp; //Set the stretch type. IRasterStretch stretchType = (IRasterStretch)rasterRenderer; stretchType.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations; stretchType.StandardDeviationsParam = 2; return(rasterRenderer); } catch { return(null); } }
/// <summary> /// Creates a renderer for output rasters. /// </summary> /// <param name="pRL"></param> /// <param name="pColor1"></param> /// <param name="pColor2"></param> private void CreateRasterStretchRenderer(IRasterLayer pRL, IRgbColor pColor1, IRgbColor pColor2) { try { IRaster pRaster = pRL.Raster; IRasterStretchColorRampRenderer pStretchRen = new RasterStretchColorRampRendererClass(); IRasterRenderer pRasRen; IAlgorithmicColorRamp pRamp = new AlgorithmicColorRampClass(); IStyleGallery pGallery = new StyleGalleryClass(); bool bCreate; //create renderer pRasRen = (IRasterRenderer)pStretchRen; pRasRen.Raster = pRaster; pRasRen.Update(); //create color ramp pRamp.Size = 255; pRamp.FromColor = pColor1; pRamp.ToColor = pColor2; pRamp.CreateRamp(out bCreate); //apply the color ramp pStretchRen.BandIndex = 0; pStretchRen.ColorRamp = pRamp; IRasterStretch pRasStretch = (IRasterStretch)pStretchRen; pRasStretch.Background = true; double dValue = 0; pRasStretch.set_BackgroundValues(ref dValue); pRasRen.Update(); pRL.Renderer = (IRasterRenderer)pStretchRen; ArcMap.Document.ActiveView.Refresh(); ArcMap.Document.UpdateContents(); } catch (Exception ex) { clsStatic.ShowErrorMessage(ex.ToString()); } }
public static IRasterRenderer StretchRender(IRasterDataset pRasterDataset) { try { //Define the from and to colors for the color ramp IRgbColor pFromColor = new RgbColorClass(); pFromColor.Red = 255; pFromColor.Green = 0; pFromColor.Blue = 0; IRgbColor pToColor = new RgbColorClass(); pToColor.Red = 0; pToColor.Green = 255; pToColor.Blue = 0; IAlgorithmicColorRamp pRamp = new AlgorithmicColorRampClass(); pRamp.Size = 10; pRamp.FromColor = pFromColor; pRamp.ToColor = pToColor; bool createColorRamp; pRamp.CreateRamp(out createColorRamp); //create a stretch renderer IRasterStretchColorRampRenderer pStrechRenderer = new RasterStretchColorRampRendererClass(); IRasterRenderer pRasterRenderer = (IRasterRenderer)pStrechRenderer; //set the renderer properties IRaster pRaster = pRasterDataset.CreateDefaultRaster(); pRasterRenderer.Raster = pRaster; pRasterRenderer.Update(); // pStrechRenderer.BandIndex = 0; pStrechRenderer.ColorRamp = pRamp; IRasterStretch pStretchType = (IRasterStretch)pRasterRenderer; pStretchType.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations; pStretchType.StandardDeviationsParam = 2; return(pRasterRenderer); } catch (System.Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return(null); } }
/// <summary> /// 拉伸渲染 /// </summary> /// <param name="rasterLayer">渲染图层</param> /// <param name="stretType">拉伸类型</param> /// <param name="pStyleGalleryItem">颜色带样式</param> public static void RasterStretchRenderer(IRasterLayer rasterLayer, esriRasterStretchTypesEnum stretType, IStyleGalleryItem pStyleGalleryItem) { if (pStyleGalleryItem == null) { MessageBox.Show(@"Color ramp cannot be empty"); return; } //创建拉伸渲染 IRasterStretchColorRampRenderer stretchRenderer = new RasterStretchColorRampRendererClass(); IRasterRenderer rasterRenderer = (IRasterRenderer)stretchRenderer; //设置拉伸渲染参数属性 IRaster raster = rasterLayer.Raster; rasterRenderer.Raster = raster; rasterRenderer.Update(); stretchRenderer.BandIndex = 0; stretchRenderer.ColorRamp = RenderHelper.GetColorRamp(pStyleGalleryItem, 255); //设置拉伸类型 IRasterStretch stretchType = (IRasterStretch)rasterRenderer; stretchType.StretchType = stretType; rasterLayer.Renderer = rasterRenderer; }
/// <summary> ///对Raster根据数据行进行渲染,可以渲染成单通道灰度显示和RGB合成显示 /// </summary> /// <param name="renderType">渲染方式调节</param> /// <returns></returns> public IRasterLayer RasterRenderedLayer(IRasterLayer pRL, bool renderType, int grayBandIndex, int[] rgbBandIndex) { //实例新的栅格图层 IRasterLayer rlayer = new RasterLayerClass(); string fullPath = pRL.FilePath; IRasterDataset rasterDataset = OpenFileRasterDataset(fullPath); //单波段 if (rgbBandIndex == null) { //如果grayBandIndex=-1 try { IRasterRenderer render = null; render = BandCombinationShow.StretchRenderer(rasterDataset, grayBandIndex); rlayer.CreateFromDataset(rasterDataset); rlayer.Renderer = render as IRasterRenderer; return(rlayer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(null); } } else//多波段显示 { try { if (!renderType) { IRasterRenderer render = BandCombinationShow.StretchRenderer(rasterDataset, grayPos); rlayer.CreateFromDataset(rasterDataset); rlayer.Renderer = render as IRasterRenderer; } else { //设置彩色合成顺序 生成新的渲染模式 IRasterRGBRenderer render = new RasterRGBRendererClass(); render.RedBandIndex = rgbBandIndex[0]; render.GreenBandIndex = rgbBandIndex[1]; render.BlueBandIndex = rgbBandIndex[2]; IRasterStretch stretchType = (IRasterStretch)render; stretchType.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations; stretchType.StandardDeviationsParam = 2; rlayer.CreateFromDataset(rasterDataset); rlayer.Renderer = render as IRasterRenderer; } return(rlayer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); return(null); } } }
//yjl 20110827 modify 根据渲染对象初始化界面 public void InitRasterRendererObject(IRasterLayer inRL, IRasterRenderer pRenderer) { flag = true; IRaster pRaster = inRL.Raster; IRasterBandCollection pRBC = pRaster as IRasterBandCollection; IRasterBand pRB = pRBC.Item(0);//获取第一波段 bool hasStatis = false; pRB.HasStatistics(out hasStatis); if (!hasStatis) { pRB.ComputeStatsAndHist();//统计直方图 } IRasterStatistics pRStatis = pRB.Statistics; minValueInput.Value = pRStatis.Minimum;//最大最小值 maxValueInput.Value = pRStatis.Maximum; IRasterStretchColorRampRenderer pRSCRRenderer = pRenderer as IRasterStretchColorRampRenderer; if (pRSCRRenderer.ColorScheme != "") { cmbColorRamp.Text = pRSCRRenderer.ColorScheme;//颜色方案 } DevComponents.Editors.ComboItem selItem = cmbColorRamp.SelectedItem as DevComponents.Editors.ComboItem; Bitmap bmp = new Bitmap(selItem.Image); bmp.RotateFlip(RotateFlipType.Rotate270FlipNone); pBoxColorRamp.Image = bmp; //txtMaxLb.Text=pRSCRRenderer.LabelHigh;//标签 //txtMinLb.Text=pRSCRRenderer.LabelLow; IRasterStretch pRStretch = pRSCRRenderer as IRasterStretch; if (pRStretch.Background)//背景值 { checkBackgroundColor.Checked = true; dbBackgrdVal.Value = pRStretch.get_BackgroundValues(); IColor pColor = pRStretch.BackgroundColor; //esri color System.Drawing.Color bakColor = cWinColor(pColor); colorPickerBackGround.SelectedColor = bakColor; //背景值颜色 } else { checkBackgroundColor.Checked = false; dbBackgrdVal.Enabled = false; } if (pRStretch.Invert)//色带方向 { checkReverse.Checked = true; } else { checkReverse.Checked = false; } IRasterDisplayProps pRDP = pRSCRRenderer as IRasterDisplayProps; System.Drawing.Color nodataColor = cWinColor(pRDP.NoDataColor); colorPickerNoData.SelectedColor = nodataColor;//无效值颜色 flag = false; }
/// <summary> /// 初始化与拉伸相关控件 /// </summary> private void initstreach() { string sInstall = ClsGDBDataCommon.GetParentPathofExe() + @"Resource\Style\ESRI.ServerStyle"; axSymbologyControl1.LoadStyleFile(sInstall); axSymbologyControl1.StyleClass = esriSymbologyStyleClass.esriStyleClassColorRamps; pSymbolClass = axSymbologyControl1.GetStyleClass(esriSymbologyStyleClass.esriStyleClassColorRamps); pRasterRender = pRLayer.Renderer; pRasterRenderColorRamp = pRasterRender as IRasterRendererColorRamp; //生成色度带 if (pRasterRender is IRasterStretchColorRampRenderer) { IStyleGalleryItem pStyleGalleryItem = new ServerStyleGalleryItem(); pStyleGalleryItem.Item = pRasterRenderColorRamp.ColorRamp; pSymbolClass.AddItem(pStyleGalleryItem, 0); pSymbolClass.SelectItem(0); } for (int i = 0; i < pSymbolClass.get_ItemCount(pSymbolClass.StyleCategory); i++) { stdole.IPictureDisp pPicture = pSymbolClass.PreviewItem(pSymbolClass.GetItem(i), cmbColorRamp.Width, cmbColorRamp.Height); Image image = Image.FromHbitmap(new System.IntPtr(pPicture.Handle)); cmbColorRamp.Items.Add(image); } if (cmbColorRamp.Items.Count > 0) { cmbColorRamp.SelectedIndex = 0; } //判断拉伸方式和拉伸波段 if (pRasterRender is IRasterStretchColorRampRenderer) { pSCRampRender = pRasterRender as IRasterStretchColorRampRenderer; pRasterStretch = pRasterRender as IRasterStretch; int bandindex = pSCRampRender.BandIndex; cmbBand.SelectedIndex = bandindex; if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_Custom) { cmbStreach.SelectedIndex = 1; } else if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum) { cmbStreach.SelectedIndex = 2; } else if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_StandardDeviations) { cmbStreach.SelectedIndex = 3; } else if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_HistogramEqualize) { cmbStreach.SelectedIndex = 4; } else { cmbStreach.SelectedIndex = 0; } lblminstr.Text = pSCRampRender.LabelLow; lblmaxstr.Text = pSCRampRender.LabelHigh; txtmin.Text = pSCRampRender.LabelLow; txtmax.Text = pSCRampRender.LabelHigh; if (pRasterStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum) { txtmax.Visible = true; txtmin.Visible = false; } } else { cmbBand.SelectedIndex = 0; cmbStreach.SelectedIndex = 0; } isminmax = true; }
private void btnuse_Click(object sender, EventArgs e) { if (treeshow.SelectedIndex == 1) { IRasterRGBRenderer2 pRRGBRenderUse = new RasterRGBRendererClass(); if ((bool)gridsymbol.Rows[0].Cells[0].Value == true) { pRRGBRenderUse.UseRedBand = true; } else { pRRGBRenderUse.UseRedBand = false; } if ((bool)gridsymbol.Rows[1].Cells[0].Value == true) { pRRGBRenderUse.UseGreenBand = true; } else { pRRGBRenderUse.UseGreenBand = false; } if ((bool)gridsymbol.Rows[2].Cells[0].Value == true) { pRRGBRenderUse.UseBlueBand = true; } else { pRRGBRenderUse.UseBlueBand = false; } if ((bool)gridsymbol.Rows[3].Cells[0].Value == true) { pRRGBRenderUse.UseAlphaBand = true; } else { pRRGBRenderUse.UseAlphaBand = false; } pRRGBRenderUse.RedBandIndex = cmbred.SelectedIndex; pRRGBRenderUse.GreenBandIndex = cmbgreen.SelectedIndex; pRRGBRenderUse.BlueBandIndex = cmbblue.SelectedIndex; pRRGBRenderUse.AlphaBandIndex = cmbalpha.SelectedIndex; pRLayer.Renderer = (IRasterRenderer)pRRGBRenderUse; } else { if (pRStretch.StretchType == esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum) { if (txtmin.Text == "" && txtmax.Text != "") { MessageBox.Show("请设置拉伸的最小值", "提示", MessageBoxButtons.OK); } else if (txtmax.Text == "" && txtmin.Text != "") { MessageBox.Show("请设置拉伸的最大值", "提示", MessageBoxButtons.OK); } else if (txtmax.Text == "" && txtmin.Text == "") { MessageBox.Show("请设置拉伸的最大值以及最小值", "提示", MessageBoxButtons.OK); } else { pRasterStretchMinMax = (IRasterStretchMinMax)pRStretch; pRasterStretchMinMax.UseCustomStretchMinMax = true; pRasterStretchMinMax.CustomStretchMin = double.Parse(txtmin.Text); pRasterStretchMinMax.CustomStretchMax = double.Parse(txtmax.Text); pRStretch = (IRasterStretch)pRasterStretchMinMax; pRStretch.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_MinimumMaximum; } } if (chkdisplay.Checked == true) { pRStretch.Background = true; pRStretch.BackgroundColor = ClsGDBDataCommon.ColorToIColor(colbackg.SelectedColor); pRStretch.set_BackgroundValues(Convert.ToDouble(backvalue.Text)); } else { pRStretch.Background = false; } IRasterStretchColorRampRenderer pStretchColorRasterRenderer = (IRasterStretchColorRampRenderer)pRStretch;; IRasterRenderer pRasterRenderer = pStretchColorRasterRenderer as IRasterRenderer; pRasterRenderer.Raster = pRLayer.Raster; pRasterRenderer.Update(); pStretchColorRasterRenderer.BandIndex = cmbBand.SelectedIndex; pStretchColorRasterRenderer.ColorRamp = PColorramp as IColorRamp; pRasterRenderer.Update(); pRLayer.Renderer = pStretchColorRasterRenderer as IRasterRenderer; } if (pTocContral.Buddy == pMapContral.Object) { pTocContral.SetBuddyControl(pMapContral); pMapContral.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); pTocContral.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } else if (pTocContral.Buddy.Equals(pSceneControl.Object)) { pTocContral.SetBuddyControl(pSceneControl); IActiveView pActiveView = pSceneControl.Scene as IActiveView; pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pRLayer, null); pTocContral.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } }