首页 > 解决方案 > 如何使用 RGB 值通过黄色从红色渐变到绿色?

问题描述

我想根据 0 到 100 的值显示一种颜色。一端 (100) 是纯红色,另一端 (0) 是纯绿色。在中间(50),我希望它是黄色的。这是我的代码。它不会产生黄色。

for (int i = 0; i < img.Rows; i++)
{
    for (int j = 0; j < img.Cols; j++)
    {
        GazeMap[i, j] = (GazeMap[i, j] - MinNumber) / (MaxNumber - MinNumber);
    }
}
double red, green, blue = 0;

for (int i = 0; i < img.Rows; i++)
{
    for (int j = 0; j < img.Cols; j++)
    {
        red = 255 * GazeMap[i, j];
        green = 255 * (1 - GazeMap[i, j]);
        img[i, j] = new Rgb(red, green, blue);
    }
}

标签: c#algorithmrgb

解决方案


您需要从 255,0,0(红色)渐变到 255,255,0(黄色),然后再渐变到 0,255,0(绿色)

我会做两个循环,第一个在图像的前半部分从红色变为黄色,另一个在另一半上从黄色变为绿色。

for (int i = 0; i < img.Rows; i++)
{     
   for (int j = 0; j < img.Cols / 2; j++)
   {
       img[i, j] = new Rgb(255, 255 * 2 * (double)j / img.Cols, 0);
   }
}  

for (int i = 0; i < img.Rows; i++)
{     
   for (int j = img.Cols / 2; j < img.Cols; j++)
   {
       img[i, j] = new Rgb(255 - (255 * 2 * (double)j / img.Cols), 255, 0);
   }
}        

请注意,您必须将 j 转换为双精度数,否则计算将四舍五入。

此外,每行计算一次颜色会更有效,而不是为每个像素计算一次。

实际上,使用图形库生成渐变画笔并使用它来填充图像会更有效。


推荐阅读