Exemplo n.º 1
0
        /// <summary>
        /// Applies the gamma-correction to the given color.
        /// </summary>
        /// <param name="color">The color to correct.</param>
        public void ApplyTo(CorsairColor color)
        {
            if (Math.Abs(R - 1f) > float.Epsilon)
            {
                color.R = ColorHelper.GetIntColorFromFloat((float)Math.Pow(color.GetFloatR(), 1.0 / R));
            }

            if (Math.Abs(G - 1f) > float.Epsilon)
            {
                color.G = ColorHelper.GetIntColorFromFloat((float)Math.Pow(color.GetFloatG(), 1.0 / G));
            }

            if (Math.Abs(B - 1f) > float.Epsilon)
            {
                color.B = ColorHelper.GetIntColorFromFloat((float)Math.Pow(color.GetFloatB(), 1.0 / B));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Blends two colors.
        /// </summary>
        /// <param name="bg">The background-color.</param>
        /// <param name="fg">The foreground-color</param>
        /// <returns>The resulting color.</returns>
        public static CorsairColor Blend(this CorsairColor bg, CorsairColor fg)
        {
            // ReSharper disable once ConvertIfStatementToSwitchStatement
            if (fg.A == 255)
            {
                return(fg);
            }

            if (fg.A == 0)
            {
                return(bg);
            }

            float resultA = (1f - (1f - fg.GetFloatA()) * (1f - bg.GetFloatA()));
            float resultR = (fg.GetFloatR() * fg.GetFloatA() / resultA + bg.GetFloatR() * bg.GetFloatA() * (1f - fg.GetFloatA()) / resultA);
            float resultG = (fg.GetFloatG() * fg.GetFloatA() / resultA + bg.GetFloatG() * bg.GetFloatA() * (1f - fg.GetFloatA()) / resultA);
            float resultB = (fg.GetFloatB() * fg.GetFloatA() / resultA + bg.GetFloatB() * bg.GetFloatA() * (1f - fg.GetFloatA()) / resultA);

            return(CreateColorFromFloat(resultA, resultR, resultG, resultB));
        }