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

10-11 10:53