其实这个功能我们可以通过AO中的IAlgorithmicColorRamp来实现,并且不会有等级多少的限制,用法就是传递给它起始和结束的颜色,然后通过CreateRamp就可以生成其间渐变的各个颜色值。
示例的代码在此下载。
在编写这段代码的过程中我遇到了这样的问题,AO生成的IColor对象,不能直接转换成.net提供的Color对象。这样就需要我们手工来完成提取IColor的R,G,B颜色,然后初始化一个Color对象。其中提取R,G,B的值用到了按位运算。
int R = color.RGB & 0xff;
int G = (color.RGB & 0xff00) / 0x100;
int B = (color.RGB & 0xff0000) / 0x10000;
int G = (color.RGB & 0xff00) / 0x100;
int B = (color.RGB & 0xff0000) / 0x10000;
试验的结果转换的Color对象颜色是正确的,而直接通过FromArgb(color.RGB)得到的是错误的,尽管FromArgb接受一个32bit的颜色参数值。
希望能帮大家少走弯路。