|
阅读:970回复:0
ArcObject开发中颜色的处理
<P>首先给大家介绍一个网站<a href="http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_intro.html" target="_blank" >ColorBrewer</A>,我们在制作专题图时,都要根据地图的内容来选择合适的颜色主题,比如,表现降水的多采用蓝色,表现高温多采用红色,表现沙尘多采用黄色。然后根据等级来分出不同的色阶。<a href="http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_intro.html" target="_blank" >ColorBrewer</A>为我们提供了一个很好的参考,你可以选择等级的数量,此网站默认的是不能大于10个级别,然后选择一个主色调。接下来它会为你生成每个等级的颜色值,并可以转换成各种格式。<BR><IMG src="http://www.cnblogs.com/images/cnblogs_com/renji/colorbrewer.jpg" border=0><BR><BR>其实这个功能我们可以通过AO中的IAlgorithmicColorRamp来实现,并且不会有等级多少的限制,用法就是传递给它起始和结束的颜色,然后通过CreateRamp就可以生成其间渐变的各个颜色值。<BR><BR>示例的代码<a href="http://www.cnblogs.com/Files/renji/ColorRamp.zip" target="_blank" >在此下载</A>。<BR><BR>在编写这段代码的过程中我遇到了这样的问题,AO生成的IColor对象,不能直接转换成.net提供的Color对象。这样就需要我们手工来完成提取IColor的R,G,B颜色,然后初始化一个Color对象。其中提取R,G,B的值用到了按位运算。<BR><BR>int R = color.RGB ; 0xff;<BR>int G = (color.RGB ; 0xff00) / 0x100;<BR>int B = (color.RGB ; 0xff0000) / 0x10000;<BR></P>
<P>试验的结果转换的Color对象颜色是正确的,而直接通过FromArgb(color.RGB)得到的是错误的,尽管FromArgb接受一个32bit的颜色参数值。</P> |
|
|