0

描画機能の色を回転させようとしていますが、どれも似たようなことをしていて、見栄えを良くするのに役立ちます。

    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);
    }

編集

回転色を購入するつまり、ブラシを赤から青に、青から緑に、次に黄色に、そして赤に戻したいということです。ivこれをさらに調べて、これが私が望むものです

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);
    }
4

1 に答える 1

2

色を滑らかに変化させたい場合は、HSV 色空間の使用を検討する必要があります。実際には、色相値 (H) は度数で測定され、この値を増やして他の値をそのままにしておくと、色が回転します。

HSV 空間をデフォルトの色に変換する方法を次に示します。VB コードを C# に変換できるはずです。

于 2012-03-05T21:00:38.630 に答える