예제 #1
0
 /// <summary>
 /// 色相を得る。
 /// </summary>
 /// <param name="rgb">RGBカラー</param>
 /// <param name="min">R,G,Bのうち最小値</param>
 /// <param name="max">R,G,Bのうち最大値</param>
 /// <returns>色相が返る</returns>
 private static float GetHue(Color rgb, int min, int max)
 {
     if (max != min)
     {
         if (rgb.R == max)
         {
             float h = 60.0f * (rgb.G - rgb.B) / (float)(max - min);
             return(ColorUtility.GetHueWithLimitedRange(h));
         }
         else if (rgb.G == max)
         {
             float h = 60.0f * (rgb.B - rgb.R) / (float)(max - min) + 120.0f;
             return(ColorUtility.GetHueWithLimitedRange(h));
         }
         else
         {
             float h = 60.0f * (rgb.R - rgb.G) / (float)(max - min) + 240.0f;
             return(ColorUtility.GetHueWithLimitedRange(h));
         }
     }
     else
     {
         return(0.0f);
     }
 }
예제 #2
0
        /// <summary>
        /// 新しいHSL色を得る。
        /// </summary>
        /// <param name="alpha">不透明度(0.0≦alpha≦1.0)</param>
        /// <param name="hue">色相(0.0≦hue<360)</param>
        /// <param name="saturation">彩度(0.0≦saturation≦1.0)</param>
        /// <param name="lightness">輝度(0.0≦lightness≦1.0)</param>
        /// <returns>色</returns>
        public static ColorHSL FromAHSL(float alpha, float hue, float saturation, float lightness)
        {
            float a = ColorUtility.Clamp(alpha, 0.0f, 1.0f);
            float h = ColorUtility.GetHueWithLimitedRange(hue);
            float s = ColorUtility.Clamp(saturation, 0.0f, 1.0f);
            float l = ColorUtility.Clamp(lightness, 0.0f, 1.0f);

            return(new ColorHSL(a, h, s, l));
        }
예제 #3
0
        /// <summary>
        /// HSVの色調整を行ってピクセルデータを返す。
        /// </summary>
        /// <param name="c">カラー</param>
        /// <param name="hue">色差加算値(-360≦hue≦360)</param>
        /// <param name="saturation">彩度加割合(-255≦saturation≦255)</param>
        /// <param name="value">明度加算割合(-255≦value≦255)</param>
        /// <returns>カラー</returns>
        public static Color ProcessHSVFilter(Color c, int hue, int saturation, int value)
        {
            if (((hue == 0) && (saturation == 0) && (value == 0)))
            {
                return(c); // 色変換しない。
            }

            var   srcHSV = ColorConverter.ConvertRGBtoHSV(c);
            float h      = ColorUtility.GetHueWithLimitedRange((srcHSV.Hue + hue) % 360.0f);

            float s = ColorUtility.ModifyValueByPercent(srcHSV.Saturation, 0f, 1.0f, saturation / 255.0f);
            float v = Math.Min(ColorUtility.ModifyValueByPercent(srcHSV.Value, 0f, srcHSV.Value * 2, value / 255.0f), 1.0f);

            return(ColorConverter.ConvertHSVtoRGB(ColorHSV.FromHSV(h, s, v), c.A));
        }
예제 #4
0
        /// <summary>
        /// HSVの色調整を行ってピクセルデータを返す。
        /// </summary>
        /// <param name="c">カラー</param>
        /// <param name="hue">色差加算値(-360≦hue≦360)</param>
        /// <param name="saturation">彩度加割合(-255≦saturation≦255)</param>
        /// <param name="lightness">輝度加算割合(-255≦lightness≦255)</param>
        /// <returns></returns>
        public static Color ProcessHSLFilter(Color c, int hue, int saturation, int lightness)
        {
            if (((hue == 0) && (saturation == 0) && (lightness == 0)))
            {
                return(c); // 色変換しない。
            }

            ColorHSL srcHSL = ColorConverter.ConvertRGBtoHSL(c);
            float    h      = ColorUtility.GetHueWithLimitedRange((srcHSL.Hue + hue) % 360.0f);

            float s = ColorUtility.ModifyValueByPercent(srcHSL.Saturation, 0f, 1.0f, saturation / 255.0f);
            float l = Math.Min(ColorUtility.ModifyValueByPercent(srcHSL.Lightness, 0f, srcHSL.Lightness * 2, lightness / 255.0f), 1.0f);

            return(ColorConverter.ConvertHSLtoRGB(ColorHSL.FromHSL(h, s, l), c.A));
        }