1

わかりました。外部LEDコントローラーを使用して、画面からambilightSFXの情報をポーリングするアプリをC#で作成しました。私の質問は、コードは何ですか、または赤から緑、青にフェードし、RGB値を出力するカラークロスフェードタイプのものを作成するにはどうすればよいですか?

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

私はずっと前に「Interpolation(FadeSteps、Delay、Array)」を使用してC ++でこれを行ってきましたが、C#でどのように行うかについての手がかりがありません。

2Dボックスを描画して、ある色から次の色にフェードインさせることを考えてみてください。それがアイデアです。

何を制御しているかについて、フェードアイデアの速度を設定できるようにしたいだけです

4

1 に答える 1

1

わかりました、私があなたを正しく理解しているなら、あなたは赤から緑、そして青にフェードしたいですか?

カラーデータと状態を保持するための構造体と列挙型から始めます。

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
于 2011-04-14T22:50:25.053 に答える