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