【使い方】
/// <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 );
}
|