为java中的函数分配颜色渐变

时间:2017-07-08 17:02:11

标签: java image

我必须为大学做一个项目。我们必须模拟疾病的发展。模拟代码已经为我工作了,但我们不得不从图像中插入人口,该图像显示区域中与颜色梯度相关的区域(如红色表示每平方公里xy人,黄色表示每平方公里yz人。 ..)。黑色像素和白色像素表示这些区域没有人口。这样的函数/算法怎么样?例如,图像看起来像image,但我没有传说我只有该区域的总人口?

我可以使用哪种算法来解决我的问题?我不知道如何在这样的问题中处理颜色我首先尝试重新划分红色,绿色和蓝色部分,但那不是真的有效。

1 个答案:

答案 0 :(得分:0)

如果你只想要一个从黄色到红色的线性渐变,那就相对简单了。

RGB中的纯红色为(255, 0, 0)。有道理,对吗?为了变红,你最大化红色成分,没有绿色或蓝色。

纯黄色是(255, 255, 0),它是红色和绿色的完美均匀混合,没有蓝色。

因此,正如您所见,R=255B=0都是如此。通过改变绿色的数量,你可以在中间获得一些东西。因此,您的比例具有255个不同的值 - 它只是从人口密度映射到0到25​​5之间的值。

private static final int MAX_RGB_VALUE = 255;

int getGreen(final int maxDensity, final int minDensity, final int density)
{
    // we could/should check that minDensity < density < maxDensity else
    // we'll get divide by zero errors

    final int delta = maxDensity - minDensity;
    final float relativeDensity = density / (float) delta;
    return Math.round(relativeDensity * MAX_RGB_VALUE);
}

然后你的最终颜色看起来像是:

final int green = getGreen(maxDensity, minDensity, density);
Color colour = new Color(MAX_RGB_VALUE, green, MAX_RGB_VALUE);