Нужна помощь в C # с RGB Color Cross Fade - PullRequest
1 голос
/ 15 апреля 2011

Хорошо, я создал приложение на C #, которое запрашивает информацию с моего экрана для Ambilight SFX, используя внешний светодиодный контроллер. Мой вопрос в том, что это за код или как мне сделать что-то типа с цветным перекрестным замиранием, где я получаю переход от красного к зеленому или синему и выводу значения RGB как

red = CODE;
green = CODE; 
blue = CODE;

Я делал это давно в C ++, используя «Интерполяцию (FadeSteps, Delay, Array)», я просто не знаю, как в C #

Подумайте о том, чтобы нарисовать 2D-блок и заставить его постепенно переходить от одного цвета к другому.

Я просто хочу установить скорость затухания
Идея о том, что он контролирует

1 Ответ

1 голос
/ 15 апреля 2011

Хорошо, если я вас правильно понял, вы хотите перейти от красного к зеленому или синему?

Начиная со структуры и перечисления для хранения наших данных о цвете и состоянии.

public enum PrimaryColor
{
    Red,
    Green,
    Blue
}

public struct Color
{
    public byte r;
    public byte g;
    public byte b;

    public Color(byte r, byte g, byte b)
    {
        this.r = r;
        this.g = g;
        this.b = b;
    }
}

Затем мы создадим некоторые переменные для хранения данных о нашем состоянии, включая массив, который мы пройдем.

Color ActualColor = new Color(255, 0, 0);
int State = 0;
PrimaryColor[] Order = { PrimaryColor.Red, PrimaryColor.Green, PrimaryColor.Blue };

Затем, в вашей функции обновления (скажем, по таймеру, циклу while и т. Д.) Мы добавляем небольшой оператор switch для обновления цветов, проверки на переполнение байтов и изменения состояний.

switch (Order[State])
{
    case PrimaryColor.Red:
        ActualColor.r++;
        if(ActualColor.g > 0) ActualColor.g--;
        if (ActualColor.b > 0) ActualColor.b--;
        if (ActualColor.r == 255 && ActualColor.g == 0 && ActualColor.b == 0) State++;
        break;
    case PrimaryColor.Green:
        ActualColor.g++;
        if (ActualColor.r > 0) ActualColor.r--;
        if (ActualColor.b > 0) ActualColor.b--;
        if (ActualColor.r == 0 && ActualColor.g == 255 && ActualColor.b == 0) State++;
        break;
    case PrimaryColor.Blue:
        ActualColor.b++;
        if (ActualColor.g > 0) ActualColor.g--;
        if (ActualColor.r > 0) ActualColor.r--;
        if (ActualColor.r == 0 && ActualColor.g == 0 && ActualColor.b == 255) State++;
        break;
    default:
        break;
}
if (State == Order.Length) State = 0;

//Send color data to your controller
...