我需要将 0.0 到 1.0 之间的值转换为它们的颜色表示(每个值都是一个像素)。我正在制作频谱图,因此值越高,像素应该越亮(如下图所示)。
我该怎么做?我在 C# 中工作,但普遍适用的解决方案也很好。
例子:
最佳答案
这个答案不仅应该向您展示如何从单个浮点值创建颜色,而且输出应该与显示的强度标度非常相似。
private float LinearStep(float x, float start, float width = 0.2f)
{
if (x < start)
return 0f;
else if (x > start+width)
return 1;
else
return (x-start) / width;
}
private float GetRedValue(float intensity)
{
return LinearStep(intensity, 0.2f);
}
private float GetGreenValue(float intensity)
{
return LinearStep(intensity, 0.6f);
}
private float GetBlueValue(float intensity)
{
return LinearStep(intensity, 0f)
- LinearStep(intensity, 0.4f)
+ LinearStep(intensity, 0.8f);
}
private Color getColor(float intensity)
{
return Color.FromArgb(255,
(int)(255*GetRedValue(intensity)),
(int)(255*GetGreenValue(intensity)),
(int)(255*GetBlueValue(intensity))
);
}
我是用notepad++做的,所以没测试过。但是你应该明白了 ;-)
当然你可以用它来创建一个查找表。这完全取决于你 ;-)
由于我无法将此图片放在评论中,以下是如何获得此解决方案的过程:
- 识别“纯”颜色。我指的是 8 色调色板中的那些,其中每个分量要么是 255,要么是零。
- 画虚线。您知道这些点的 rgb 值。
- 线性插值。
第 3 步由代码中的 LinearStep() 函数完成,每个斜率调用一次。添加上升斜率,减去下降斜率。如果您不确定这一点,请尝试使用原始颜色图来执行此操作。我希望你能从这里开始:-)
关于c# - 将值 [0.0-1.0] 映射到颜色增益,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868234/