将值[0.0-1.0]映射到颜色增益

Pri*_*alj 2 c# pixel colors spectrogram

我需要将0.0到1.0的值转换为它们的颜色表示(每个值都是一个像素).我正在制作光谱图,因此像素应该是最亮的值(如下图所示).

我怎样才能做到这一点?我在C#工作,但普遍适用的解决方案也很好.

例:

在此输入图像描述

Das*_*ter 6

这个答案不仅应该向您展示如何从单个浮点值创建颜色,而且输出应该非常类似于显示的强度标度.

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))
    );
}
Run Code Online (Sandbox Code Playgroud)

我在记事本++中这样做了,所以没有经过测试.但是你应该得到这个想法;-)

当然,您可以使用它来创建查找表.这完全取决于你;-)


由于我无法在评论中添加此图像,因此以下是如何获得此解决方案的过程: 图1

  1. 识别"纯"颜色.通过这个我的意思是8色调色板中的每个组件是255或零.
  2. 画出虚线.你知道这些点的rgb值.
  3. 线性插值.

第3步由代码中的LinearStep()函数完成,每个斜率调用一次.增加上升斜率,减去下降斜率.如果您对此不确定,请尝试使用原始颜色映射.我希望你能从这里拿走它:-)