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

标签 c# colors pixel spectrogram

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

我该怎么做?我在 C# 中工作,但普遍适用的解决方案也很好。

例子:

enter image description here

最佳答案

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

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++做的,所以没测试过。但是你应该明白了 ;-)

当然你可以用它来创建一个查找表。这完全取决于你 ;-)


由于我无法将此图片放在评论中,以下是如何获得此解决方案的过程: figure 1

  1. 识别“纯”颜色。我指的是 8 色调色板中的那些,其中每个分量要么是 255,要么是零。
  2. 画虚线。您知道这些点的 rgb 值。
  3. 线性插值。

第 3 步由代码中的 LinearStep() 函数完成,每个斜率调用一次。添加上升斜率,减去下降斜率。如果您不确定这一点,请尝试使用原始颜色图来执行此操作。我希望你能从这里开始:-)

关于c# - 将值 [0.0-1.0] 映射到颜色增益,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868234/

相关文章:

r - 在格子图中添加/代替背景颜色使用图案

iphone - 如何将我的主页的纬度/经度与 iPhone 中主页图像的像素关联起来?

c# - 将最近 2 周的数据拆分为当前周和前一周

c# - 将文件复制到 SharePoint 中的文档库

css - 您应该使用 rgba(0, 0, 0, 0) 还是 rgba(255, 255, 255, 0) 在 CSS 中实现透明度?

macos - 给 fish 上色-ls

css - 智能手机网页设计 - 像素大小

c++ - 获取以给定字体呈现的字符串的像素表示

c# - 如何将两个不同的列表映射到一个列表?

c# - 返回自定义结果的单元测试 ASP.NET Web API 2 Controller