我需要将值从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/