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