Example #1
0
        //HSV颜色构造器
        private IHsvColor getHSV(int Hue, int Saturation, int Val)
        {
            IHsvColor pColor; pColor = new HsvColorClass();

            pColor.Hue        = Hue;
            pColor.Saturation = Saturation;
            pColor.Value      = Val; return(pColor);
        }
Example #2
0
        public IColor getHVS(int H = 0, int S = 0, int V = 0)
        {
            IHsvColor pHsvColor;

            pHsvColor            = new HsvColorClass();
            pHsvColor.Hue        = H;
            pHsvColor.Saturation = S;
            pHsvColor.Value      = V;
            return(pHsvColor as IColor);
        }
Example #3
0
        public IHsvColor Hsv(int hue, int saturation, int val)
        {
            IHsvColor pHsvC;

            pHsvC = new HsvColorClass();

            pHsvC.Hue = hue;

            pHsvC.Saturation = saturation;

            pHsvC.Value = val;

            return(pHsvC);
        }
Example #4
0
        /// <summary>
        /// 输入HSV值,获取IHsvColor型值
        /// </summary>
        /// <param name="intH">Hue</param>
        /// <param name="intS">Saturation</param>
        /// <param name="intV">Value</param>
        /// <returns>IHsvColor</returns>
        public static IHsvColor GetHsvColor(int intH, int intS, int intV)
        {
            IHsvColor hsvColor = null;

            if (intH < 0 || intH > 360 || intS < 0 || intS > 100 || intV < 0 || intV > 100)
            {
                return(hsvColor);
            }
            hsvColor            = new HsvColorClass();
            hsvColor.Hue        = intH;
            hsvColor.Saturation = intS;
            hsvColor.Value      = intV;
            return(hsvColor);
        }
Example #5
0
 public IHsvColor GetHsvColor(int iHue, int iSaturation, int iValue, bool bUseWinDithering)
 {
     try
     {
         IHsvColor color = null;
         color                     = new HsvColorClass();
         iHue                      = this.CheckNumValueRegion(iHue, 0, 360);
         iSaturation               = this.CheckNumValueRegion(iSaturation, 0, 100);
         iValue                    = this.CheckNumValueRegion(iValue, 0, 100);
         color.Hue                 = iHue;
         color.Saturation          = iSaturation;
         color.Value               = iValue;
         color.UseWindowsDithering = bUseWinDithering;
         return(color);
     }
     catch (Exception exception)
     {
         this.mErrOpt.ErrorOperate(this.mSubSysName, "FunFactory.ColorFun", "GetHsvColor", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", "");
         return(null);
     }
 }
Example #6
0
        /// <summary>
        /// Class Break Render
        /// </summary>
        /// <param name="currentLayer"></param>
        /// <param name="breakCount"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091114</date>
        public static void ClassBreakRender(ILayer currentLayer, int breakCount, string fieldName, ref double[] Classes, ref int[] Colors, bool reverse)
        {
            //Get All Value
            object          dataFrequency   = null;
            object          dataValues      = null;
            ITableHistogram pTableHistogram = new BasicTableHistogramClass();
            IBasicHistogram pHistogram      = (IBasicHistogram)pTableHistogram;

            pTableHistogram.Field = fieldName;
            pTableHistogram.Table = (currentLayer as IGeoFeatureLayer).DisplayFeatureClass as ITable;
            pHistogram.GetHistogram(out dataValues, out dataFrequency);

            //Class
            IClassifyGEN pClassify = new EqualIntervalClass();

            pClassify.Classify(dataValues, dataFrequency, ref breakCount);

            //Set Class Breaks
            Classes = (double[])pClassify.ClassBreaks;
            int ClassesCount = Classes.GetUpperBound(0);
            IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();

            pClassBreaksRenderer.Field = fieldName;

            //Set From to Color
            IHsvColor pFromColor = new HsvColorClass();

            pFromColor.Hue        = reverse ? 105 : 353;
            pFromColor.Saturation = reverse ? 46 : 56;
            pFromColor.Value      = reverse ? 76 : 92;
            IHsvColor pToColor = new HsvColorClass();

            pToColor.Hue        = reverse ? 353 : 105;
            pToColor.Saturation = reverse ? 56 : 46;
            pToColor.Value      = reverse ? 92 : 76;

            //Get Color
            IAlgorithmicColorRamp pAlgorithmicCR = new AlgorithmicColorRampClass();

            pAlgorithmicCR.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
            pAlgorithmicCR.FromColor = pFromColor;
            pAlgorithmicCR.ToColor   = pToColor;
            pAlgorithmicCR.Size      = ClassesCount;
            bool ok = false;

            pAlgorithmicCR.CreateRamp(out ok);
            IEnumColors pEnumColors = pAlgorithmicCR.Colors;

            //Set Break Count
            pClassBreaksRenderer.BreakCount           = ClassesCount;
            pClassBreaksRenderer.SortClassesAscending = true;

            //Set Break Interval
            for (int lbreakIndex = 0; lbreakIndex <= ClassesCount - 1; lbreakIndex++)
            {
                IColor pColor = pEnumColors.Next();
                Colors[lbreakIndex] = pColor.RGB;
                ISimpleFillSymbol pSimpleFillS = new SimpleFillSymbolClass();
                pSimpleFillS.Color = pColor;
                pSimpleFillS.Style = esriSimpleFillStyle.esriSFSSolid;
                pClassBreaksRenderer.set_Symbol(lbreakIndex, (ISymbol)pSimpleFillS);
                pClassBreaksRenderer.set_Break(lbreakIndex, Classes[lbreakIndex + 1]);
            }

            //Set Render
            (currentLayer as IGeoFeatureLayer).Renderer = pClassBreaksRenderer as IFeatureRenderer;
        }
Example #7
0
        private void polygonClassificationDye(ILayer pLayer)
        {
            IGeoFeatureLayer pGeoFeatureLayer;
            ITable           pTable;
            IClassifyGEN     pClassify;
            ITableHistogram  pTableHistogram;
            IBasicHistogram  pHistogram;
            object           dataFrequency;

            object dataValues;

            double[]             Classes;
            int                  ClassesCount;
            IClassBreaksRenderer pClassBreakRenderer;
            IHsvColor            pFromColor;
            IHsvColor            pToColor;

            IAlgorithmicColorRamp pAIgorithmicCR;

            IEnumColors pEnumColors;

            bool ok;

            IColor            pColor;
            ISimpleFillSymbol pSimpleFillS;
            int    IbreakIndex;
            string strPopFiled = cbField1.Text;
            int    numDesiredClasses;

            try
            {
                numDesiredClasses = int.Parse(textBox1.Text.ToString());
            }
            catch
            {
                MessageBox.Show("请输入分级个数");
                return;
            }

            IMap pMap = axMapControl1.Map;

            pMap.ReferenceScale = 0;
            pGeoFeatureLayer    = pLayer as IGeoFeatureLayer;
            //从pTable的id字段中得到信息给dataValues和dataFrequency两个数组
            pTable                = (ITable)pGeoFeatureLayer.FeatureClass;
            pTableHistogram       = new BasicTableHistogramClass();
            pHistogram            = (IBasicHistogram)pTableHistogram;
            pTableHistogram.Field = strPopFiled;
            pTableHistogram.Table = pTable;
            pHistogram.GetHistogram(out dataValues, out dataFrequency);
            //下面是分级方法,用于根据获取的值计算出符号要求的数据
            pClassify = new EqualIntervalClass();
            try
            {
                pClassify.Classify(dataValues, dataFrequency, ref numDesiredClasses);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            //返回一个数组
            Classes                   = (double[])pClassify.ClassBreaks;
            ClassesCount              = Classes.GetUpperBound(0);
            pClassBreakRenderer       = new ClassBreaksRendererClass();
            pClassBreakRenderer.Field = strPopFiled;
            //设置着色对象的分级数目
            pClassBreakRenderer.BreakCount           = ClassesCount;
            pClassBreakRenderer.SortClassesAscending = true;
            //产生分级着色需要的颜色带对象的起止颜色对象
            pFromColor            = new HsvColorClass();
            pFromColor.Hue        = 60;
            pFromColor.Saturation = 100;
            pFromColor.Value      = 96;
            pToColor            = new HsvColorClass();
            pToColor.Hue        = 0;
            pToColor.Saturation = 100;
            pToColor.Value      = 96;
            //产生颜色带对象
            pAIgorithmicCR           = new AlgorithmicColorRampClass();
            pAIgorithmicCR.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
            pAIgorithmicCR.FromColor = pFromColor;
            pAIgorithmicCR.ToColor   = pToColor;
            pAIgorithmicCR.Size      = ClassesCount;
            pAIgorithmicCR.CreateRamp(out ok);
            //获得颜色
            pEnumColors = pAIgorithmicCR.Colors;
            //分类着色对象中的symbol和break的下标是从0开始
            for (IbreakIndex = 0; IbreakIndex <= ClassesCount - 1; IbreakIndex++)
            {
                pColor             = pEnumColors.Next();
                pSimpleFillS       = new SimpleFillSymbolClass();
                pSimpleFillS.Color = pColor;
                pSimpleFillS.Style = esriSimpleFillStyle.esriSFSSolid;
                //这里是构造函数不同颜色着色的方法
                pClassBreakRenderer.set_Symbol(IbreakIndex, (ISymbol)pSimpleFillS);
                //着色对象的断点
                pClassBreakRenderer.set_Break(IbreakIndex, Classes[IbreakIndex + 1]);
            }
            pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreakRenderer;
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
Example #8
0
        public void GraduatedColors(IFeatureLayer pfeatLyr, string sFieldName, int numclasses)
        {
            IGeoFeatureLayer pGeoFeatureL = pfeatLyr as IGeoFeatureLayer;
            object           dataFrequency;
            object           dataValues;
            bool             ok;
            int             breakIndex;
            ITable          pTable          = pGeoFeatureL.FeatureClass as ITable;//各个字段变成一个表
            ITableHistogram pTableHistogram = new BasicTableHistogramClass();
            IBasicHistogram pBasicHistogram = (IBasicHistogram)pTableHistogram;

            pTableHistogram.Field = sFieldName;
            pTableHistogram.Table = pTable;
            pBasicHistogram.GetHistogram(out dataValues, out dataFrequency);//获取渲染值及其出现的频率
            IClassifyGEN pClassify = new EqualIntervalClass();

            pClassify.Classify(dataValues, dataFrequency, ref numclasses);//进行等级划分
            double[]             Classes              = pClassify.ClassBreaks as double[];
            int                  classescount         = Classes.GetUpperBound(0);
            IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();

            pClassBreaksRenderer.Field                = sFieldName;   //分段字段
            pClassBreaksRenderer.BreakCount           = classescount; //设置分级数目
            pClassBreaksRenderer.SortClassesAscending = true;         //分机后的图例是否按升级顺序排列

            //分级颜色带的开始颜色和结束颜色(即分级颜色在此范围内)
            IHsvColor pFromColor = new HsvColorClass(); //起始颜色

            pFromColor.Hue        = 0;                  //黄色
            pFromColor.Saturation = 50;
            pFromColor.Value      = 96;
            IHsvColor ptocolor = new HsvColorClass(); //终止颜色

            ptocolor.Hue        = 80;                 //不知道什么颜色
            ptocolor.Saturation = 100;
            ptocolor.Value      = 96;


            //产生颜色带对象
            IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();

            pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
            pAlgorithmicColorRamp.FromColor = pFromColor;
            pAlgorithmicColorRamp.ToColor   = ptocolor;
            pAlgorithmicColorRamp.Size      = classescount;
            pAlgorithmicColorRamp.CreateRamp(out ok);

            //获得颜色
            IEnumColors pEnumColors = pAlgorithmicColorRamp.Colors;

            //symbol和break下标从0开始
            for (breakIndex = 0; breakIndex <= classescount - 1; breakIndex++)
            {
                IColor pColor = pEnumColors.Next();
                switch (pGeoFeatureL.FeatureClass.ShapeType)
                {
                case esriGeometryType.esriGeometryPolygon:
                {
                    ISimpleFillSymbol pSimpleFills = new SimpleFillSymbolClass();
                    pSimpleFills.Color = pColor;
                    pSimpleFills.Style = esriSimpleFillStyle.esriSFSSolid;
                    pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleFills);    //设置填充符号
                    pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);   //设定每一分级的分级断点
                    break;
                }

                case esriGeometryType.esriGeometryPolyline:
                {
                    ISimpleLineSymbol pSimplelines = new SimpleLineSymbolClass();
                    pSimplelines.Color = pColor;

                    pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimplelines);    //设置填充符号
                    pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);   //设定每一分级的分级断点
                    break;
                }

                case esriGeometryType.esriGeometryPoint:
                {
                    ISimpleMarkerSymbol pSimplemaker = new SimpleMarkerSymbolClass();
                    pSimplemaker.Color = pColor;

                    pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimplemaker);    //设置填充符号
                    pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);   //设定每一分级的分级断点
                    break;
                }
                }
            }
            pGeoFeatureL.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
            axMapControl1.Refresh();
            axTOCControl1.Update();
        }
Example #9
0
 private IHsvColor getHsvColor(int hue, int saturation, int value)
 {
     IHsvColor pHsvColor = new HsvColorClass();
     pHsvColor.Hue = hue;
     pHsvColor.Saturation = saturation;
     pHsvColor.Value = value;
     return pHsvColor;
 }
Example #10
0
        void ClassifyColor()
        {
            IGeoFeatureLayer geoFeatureLayer = mapControl.Map.get_Layer(17) as IGeoFeatureLayer;
            string           a = geoFeatureLayer.Name;
            object           dataFrequency, dataValues;


            ITableHistogram tableHistogram = new BasicTableHistogramClass();
            IBasicHistogram basicHistogram = (IBasicHistogram)tableHistogram;

            tableHistogram.Field = cmbSelField.Text;
            tableHistogram.Table = geoFeatureLayer.FeatureClass as ITable;



            basicHistogram.GetHistogram(out dataValues, out dataFrequency);
            IClassifyGEN classifyGEN = new EqualIntervalClass();

            classifyGEN.Classify(dataValues, dataFrequency, Convert.ToInt32(cmbnumclasses.Text));


            double[]             classes             = classifyGEN.ClassBreaks as double[];
            int                  classesCount        = classes.GetUpperBound(0);
            IClassBreaksRenderer classBreaksRenderer = new ClassBreaksRendererClass();



            classBreaksRenderer.Field                = cmbSelField.Text;
            classBreaksRenderer.BreakCount           = classesCount;
            classBreaksRenderer.SortClassesAscending = true;



            IHsvColor fromColor = new HsvColorClass();

            fromColor.Hue   = 0; fromColor.Saturation = 50;
            fromColor.Value = 96;
            IHsvColor toColor = new HsvColorClass();

            toColor.Hue        = 80;
            toColor.Saturation = 100;
            toColor.Value      = 96;
            bool ok;



            //产生色带
            IAlgorithmicColorRamp algorithmicCR = new AlgorithmicColorRampClass();

            algorithmicCR.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
            algorithmicCR.FromColor = fromColor;
            algorithmicCR.ToColor   = toColor;
            algorithmicCR.Size      = classesCount;
            algorithmicCR.CreateRamp(out ok);



            //获得颜色
            IEnumColors enumColors = algorithmicCR.Colors;

            for (int breakIndex = 0; breakIndex <= classesCount - 1; breakIndex++)
            {
                IColor            color      = enumColors.Next();
                ISimpleFillSymbol simpleFill = new SimpleFillSymbolClass();
                simpleFill.Color = color;
                simpleFill.Style = esriSimpleFillStyle.esriSFSSolid;
                classBreaksRenderer.set_Symbol(breakIndex, (ISymbol)simpleFill);
                classBreaksRenderer.set_Break(breakIndex, classes[breakIndex + 1]);
            }

            geoFeatureLayer.Renderer = (IFeatureRenderer)classBreaksRenderer;
            mapControl.Refresh();
            mapControl.ActiveView.Refresh();


            tocControl.Update();
        }
        public IHsvColor Hsv(int hue, int saturation, int val)
        {
            IHsvColor pHsvC;

            pHsvC = new HsvColorClass();

            pHsvC.Hue = hue;

            pHsvC.Saturation = saturation;

            pHsvC.Value = val;

            return pHsvC;
        }