我想显示基于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);
    }
}

最佳答案

您需要从255,0,0(红色)淡入到255255,0(黄色),然后淡入到0255,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转换为double,否则计算结果会四舍五入。
此外,每行计算一次颜色比每像素计算一次更有效。
实际上,使用图形库生成渐变画笔并用它填充图像会更有效。

关于c# - 如何使用RGB值从红色通过黄色渐变为绿色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52052790/

10-11 22:36