基于int的颜色渐变

时间:2014-12-23 14:53:23

标签: c colors gradient

我正在开展一个小型的C程序学校项目,它将一个填充了整数的文本文件作为参数,并在使用库连接点绘制地图之前将整数转换为x,y和z坐标特定于学校。

完成主要功能,并且在建议的奖励功能中,存在基于高度(z坐标)改变颜色的想法。 我可以通过将高度值映射到颜色来轻松实现,但这很乏味且不太优雅。

所以我的问题是:鉴于我在绘制线条时知道A点和B点的高度,以及地图上最大和最小的海拔高度值,最好的方法是什么我想要的颜色值(表示为int)?

更好的是,我如何使其适应特定的颜色?为了更清楚,让我们说我不想使用全部颜色,而是通过蓝 - 黄 - 绿 - 灰 - 白,以模拟(某种)现实地图(水,沙,草,山,雪)。当然,这只是一个例子。

注意:虽然这是奖励,但我宁愿尝试在您的帮助下找出解决方案,而不是收到预先编写的代码。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以#define一组有限的离散值,只需要您需要的值,并在代码中使用它们,而不是动态创建颜色。例如:

#define VAL_GREEN 0x00FF00L

颜色生成通常使用三个unsigned short int来表示RGB值 - 范围从0,0,0到255,255,255。通过试验R,G和G的各种组合,创建所需颜色范围的地图(草的绿色等)。 B组件。例如。 0x00,0xFF,0x00,当然会产生绿色阴影。 0xC0,0xC0,0xC0会产生灰色阴影。 MS版彩色生成/制图的 Look here

以下是我在系统中使用的一些典型颜色定义:(顺便说一句,这些映射是使用long int创建的,并且可以在任何系统上使用,基于Windows或基于Unix)

0xFF0000L = VAL_RED
0x00FF00L = VAL_GREEN
0x0000FFL = VAL_BLUE
0x00FFFFL = VAL_CYAN
0xFF00FFL = VAL_MAGENTA
0xFFFF00L = VAL_YELLOW
0x800000L = VAL_DK_RED
0x000080L = VAL_DK_BLUE
0x008000L = VAL_DK_GREEN
0x008080L = VAL_DK_CYAN
0x800080L = VAL_DK_MAGENTA
0x808000L = VAL_DK_YELLOW
0xC0C0C0L = VAL_LT_GRAY
0x808080L = VAL_DK_GRAY
0x000000L = VAL_BLACK
0xFFFFFFL = VAL_WHITE

0xA0A0A0L = VAL_GRAY
0xE0E0E0L = VAL_OFFWHITE