Как мне перейти с красного на зеленый через желтый, используя значения RGB? - PullRequest
0 голосов
/ 28 августа 2018

Я хочу отобразить цвет, основанный на значении от 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 голосов
/ 28 августа 2018

Я не знаю о GazeMap, но я просто делюсь логикой / псевдокодом.

Красный RGB (255,0,0) Желтый RGB (255 255,0) Зеленый rgb (0,128,0)

я красный J зеленый

Начните с j с 255 до середины, увеличивая на 1. Не меняйте i С середины до конца уменьшите j на .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);
    }
}
0 голосов
/ 28 августа 2018

Вам нужно угаснуть с 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 к удвоению, иначе вычисление будет округлено.

Кроме того, было бы более эффективно вычислять цвет один раз для строки, а не для каждого пикселя.

На самом деле, было бы намного эффективнее использовать графическую библиотеку для создания градиентной кисти и использовать ее для заливки изображения.

...