HSB(色相・彩度・明度)からRGB色を求める方法

  HSB(色相・彩度・明度)からRGB色を求めるには、それぞれの値の組合せから RGB 個々の値を決定します。
【使い方】
/// <summary>
/// 指定したHSB(色相・彩度・明度)からRGB色を求めます。
/// </summary>
/// <param name="alpha">アルファ値</param>
/// <param name="hue">色相(Hue)</param>
/// <param name="saturation">彩度(Saturation)</param>
/// <param name="brightness">明度(Brightness)</param>
/// <returns>求めたARGB色</returns>
private System.Drawing.Color ConvertHSBtoARGB( byte alpha, float hue, float saturation, float brightness )
{
    int maxBrightness;
    int minBrightness;
    int  red, green, blue;

    // 明度に応じて、最大・最小の輝度を求めます。
    if ( brightness <= 0.5F )
    {
        maxBrightness = (int)(brightness * ( 1.0F + saturation ) * 255.0F + 0.01F);
        minBrightness = (int)(brightness * ( 1.0F - saturation ) * 255.0F + 0.01F);
    }
    else
    {
        maxBrightness = (int)(( brightness * ( 1.0F - saturation ) + saturation ) * 255.0F + 0.01F);
        minBrightness = (int)(( brightness + ( brightness - 1.0F ) * saturation ) * 255.0F + 0.01F);
    }

    //===============================
    // 色相に応じて各RGBに値を設定
    //===============================
    if ( hue < 60.0F )
    {
        red   = maxBrightness;
        green = (int)(minBrightness + hue * (float)( maxBrightness - minBrightness ) / 60.0F + 0.01F);
        blue  = minBrightness;
    }
    else if (hue < 120.0F )
    {
        red   = (int)(maxBrightness - ( hue - 60.0F ) * ( maxBrightness - minBrightness ) / 60.0F + 0.01F);
        green = maxBrightness;
        blue  = minBrightness;
    }
    else if ( hue < 180.0F )
    {
        red   = minBrightness;
        green = maxBrightness;
        blue  = (int)(minBrightness+( hue - 120.0F ) * ( maxBrightness - minBrightness ) / 60.0F + 0.01F);
    }
    else if ( hue < 240.0F )
    {
        red   = minBrightness;
        green = (int)(maxBrightness - ( hue - 180.0F ) * ( maxBrightness - minBrightness ) / 60.0F + 0.01F);
        blue  = maxBrightness;
    }
    else if ( hue < 300.0F )
    {
        red   = (int)(minBrightness+( hue - 240.0F ) * ( maxBrightness - minBrightness) / 60.0F + 0.01F);
        green = minBrightness;
        blue  = maxBrightness;
    }
    else
    {        // hue < 360
        red   = maxBrightness;
        green = minBrightness;
        blue  = (int)(maxBrightness - ( hue - 300.0F ) * ( maxBrightness - minBrightness )/ 60.0F + 0.01F);
    }

    // 求めた RGB の各値で Color を生成し、返します。
    return System.Drawing.Color.FromArgb((int)alpha, red, green, blue );
}
【注意】
戻る