ArcGIS Engine开发教程之图层符号化(二)——符号化Color(颜色)体系

符号化Color(颜色)体系

1.ArcGIS颜色模型 

ArcGIS提供Color(颜色)的模型有多种分别是:

  • RGB颜色模型:最常用,所有颜色都是通过红色(Red)、绿色(Green)、蓝色(Blue)这三原色的混合来显示。

  • CMY颜色模型:青(Cyan)、洋红(Magenta)和黄(Yellow)三种颜色的简写,是相减混色模式,用这种方法产生的颜色之所以称为相减色,主要用于印刷中。

  • HSV颜色模型:色彩(H),纯度(S),明度(V)。

  • Gray模型:没有彩色的,灰度图像由8位信息组成,并使用256级的灰色来模拟颜色层次。

  • HLS模型: Hue(色相)、Luminance(亮度)、Saturation(饱和度)。  

图1

如上图所示Color对象是一个抽象类,它包括5个子类:它有5个颜色子类,即CmykColor、RGBColor、HSVColor、HLSColor和GrayColor,它们可以使用IColor接口定义的方法设置颜色对象的基本属性。在ArcGIS engine中最常使用的两种颜色模型是RGB和HSV,RGB类实现IRgbColor接口,而HSV类则实现IHsvColor接口,两个接口分别定义了设置一个RGBColor对象和RGBColor对象需传递的值。

接下来以一个函数来通过R,G,B值来构建一个RGBColor对象

private IRgbColor GetRGB(int r,int g,int b)

{

IRgbColor pRgbColor= new RgbColorClass();//构建一个RgbColorClass

pRgbColor.Red = r;//设置Red属性
pRgbColor.Green = g;
//
设置Green属性

pRgbColor.Blue = b;//设置Blue属性
return pRgbColor;
}

2.ColorRamp对象
在地图符号化的过程中,需要的颜色常常不是一种,而是随机或有序产生的一组颜色。如果对某一个图层进行符号化需要上百种颜色如图2所示,程序开发者肯定不能逐个产生出来。ArcGIS Engine提供了ColorRamp对象:

图2

ColorRamp类的对象可以产生颜色带,这个类实现了IColorRamp接口,它定义了一系列颜色带的属性,如 Size(产生多少种颜色),Colors(颜色带 IEnumColor)。
ColorRamp类是一个抽象类,它包括4个子类分别是:RandomColorRamp(随机颜色带)、PresetColorRamp(预设颜色带)、AlgorithmicColorRamp(起止颜色带)、MultiPartColorRamp(叠加颜色带),它们的说明如表一所示。

表一

RandomColorRamp 
使用HSV颜色模型来确定一串颜色 
PresetColorRamp 
预设的颜色模式,可存储13种颜色 
AlgorithmicColorRamp 
用起始颜色、终止颜色确定一个颜色带,起始、终止颜色使用HSV模型 
MultiPartColorRamp 
叠加产生颜色带 

在GIS应用开发中用到比较多得是RandomColorRamp(随机颜色带)和AlgorithmicColorRamp(起止颜色带)接下来详细介绍一下这两个颜色带。
AlgorithmicColorRamp是通过起止颜色来确定多个在这两个颜色之间的色带。AlgorithmicColorRamp类实现了两个接口:IColorRamp和IAlgorithmicColorRamp,两个接口之间是接口继承关系,后者包含了前者所有的方法和属性。


3.生成颜色带实例

接下来制作一个实例演示AlgorithmicColorRamp(起止颜色带)的Demo:

(1)创建一个窗体,在窗体上添加5个Picturebox用于分别显示产生的包含5个颜色的起始颜色带中的颜色,如图3所示

  

3

(2)在“生成颜色带”Button的Click事件中生成颜色带,代码片段如下所示:

private void button1_Click(object sender, EventArgs e)
{

//创建一个新AlgorithmicColorRampClass对象

IAlgorithmicColorRamp algColorRamp = new AlgorithmicColorRampClass();

//创建起始颜色对象

IRgbColor startColor = new RgbColor();

startColor.Red = 255;

startColor.Green = 0;

startColor.Blue = 0;


//创建终止颜色对象

IRgbColor endColor = new RgbColor();

endColor.Red = 0;

endColor.Green = 255;

endColor.Blue = 0;


//设置AlgorithmicColorRampClass的起止颜色属性

algColorRamp.ToColor = startColor;

algColorRamp.FromColor = endColor;

//设置梯度类型

algColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;


//设置颜色带颜色数量

algColorRamp.Size = 5;


//创建颜色带

bool bture = true;

algColorRamp.CreateRamp(out bture);


//使用IEnumColors获取颜色带

IEnumColors pEnumColors = null;

pEnumColors = algColorRamp.Colors;


//设置5个picturebox的背景色为产生颜色带的5个颜色

this.pictureBox1.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

this.pictureBox2.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

this.pictureBox3.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

this.pictureBox4.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

this.pictureBox5.BackColor = ColorTranslator.FromOle(pEnumColors.Next().RGB);

}

运行点击Button 结果如图4所示:

    

4

RandomColorRamp对象产生随机颜色带,RandomColorRamp也需要设定一个范围,但是这个范围是HSV颜色模型的,颜色将在这个范围内随机出现。 RandomColorRamp类实现了IRandomColorRamp接口
以下是生成RandomColorRamp的代码片段

IRandomColorRamp pRandomColorRamp = new RandomColorRampClass();

//** 制作一系列介于橘黄色和蓝绿色之间的随机颜色

pRandomColorRamp.StartHue = 40;

pRandomColorRamp.EndHue = 120;

pRandomColorRamp.MinValue = 65;

pRandomColorRamp.MaxValue = 90;

pRandomColorRamp.MinSaturation = 25;

pRandomColorRamp.MaxSaturation = 45;

pRandomColorRamp.Size = 20;

pRandomColorRamp.Seed = 23;

bool bture = true;

pRandomColorRamp.CreateRamp(out bture);

IEnumColors pEnumColors = pRandomColorRamp.Colors

//** 对pEnumColors进行操作

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮紫月升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值