如何使用RGB值从红色通过黄色渐变为绿色?

时间:2018-08-28 07:54:47

标签: c# algorithm 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);
    }
}

2 个答案:

答案 0 :(得分:2)

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

我将以两个循环的方式进行操作,第一个循环在图像的前半部分从红色变为黄色,另一半则从黄色变为绿色。

/1/user/-/activities/tracker/steps/date/startDate/endDate.json

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

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

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

答案 1 :(得分:1)

我不了解GazeMap,但我只是在共享逻辑/伪代码。

红色rgb(255,0,0) 黄色RGB(255,255,0) 绿色rgb(0,128,0)

我是红色 j是绿色

从j开始(从255开始直到中间增加1)。请勿更改i 从中到下将j减小0.5,将i减小1

double red, green, blue = 0;

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

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