Вращающиеся цвета?
Я пытаюсь повернуть цвета для элемента рисования, любой из которых похож на другой и может помочь сделать его хорошо выглядящим.
byte r = 200;
byte g = 100;
byte b = 050;
private int x = 1;
private void timer_elapsed(object sender, EventArgs e)
{
x++;
if(x % 3 == 0)
r++;
if(x % 5 == 0)
g++;
if(x % 2 == 0)
b++;
if (x > 100)
x = 1;
if (r >= 254)
r = 0;
if (g >= 254)
g = 0;
if (b >= 254)
b = 0;
inkCanvas1.DefaultDrawingAttributes.Color = Color.FromArgb(255, r, g, b);
}
редактировать
Я хочу, чтобы моя кисть поблекла с красного на синий, с голубого на зеленый, затем на желтый и обратно на красный, я сделал несколько сомнений, и это то, чего я хочу
254,0,0 = red
254,0,254 = pink
0,0,254 = blue
0,254,254 = cyan
0,254,0 = green
254,254,0 = yellow
254,0,0 = red
так что я смотрю на простое утверждение if здесь или я могу сделать это умнее?
редактировать
моя текущая логика заключается в следующем
byte r = 255;
byte g = 0;
byte b = 0;
private void timer_elapsed(object sender, EventArgs e)
{
//going from red to pink
if (r == 255 && g == 0 && b <= 254)
b++;
//going from pink to blue
if (r >= 1 && g == 0 && b == 255 )
r--;
//going from blue to cyan
if (r == 0 && g <= 254 && b == 255 )
g++;
//going from cyan to green
if (r == 0 && g == 255 && b >= 1)
b--;
//going from green to yellow
if (r <= 254 && g == 255 && b == 0)
r++;
//going from yellow back to red
if (r == 255 && g >= 1 && b == 0)
g--;
inkCanvas1.DefaultDrawingAttributes.Color = Color.FromArgb(255, r, g, b);
}
1 ответ
Если вы хотите добиться плавного изменения цвета, вам следует рассмотреть возможность использования цветового пространства HSV. На самом деле значение оттенка (H) измеряется в градусах, что приводит к изменению цвета при увеличении этого значения и оставлении остальных.
Вот способ конвертировать пространство HSV в цвет по умолчанию. Я думаю, вы должны быть в состоянии преобразовать код VB в C#.