Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="bitmap"></param>
        /// <param name="distanceMap"></param>
        /// <param name="glowDistance"></param>
        /// <param name="glowColor"></param>
        /// <param name="function"></param>
        public static void DrawGlow(Bitmap bitmap, DistanceEntry[,] distanceMap, float glowDistance,
                                    ArgbRev glowColor, Func <float, float> function = null)
        {
            var transparentColor = (ArgbRev)"#00000000";

            if (function == null)
            {
                function = v => v;
            }

            bitmap.Shader((color, x, y) =>
            {
                var dist = (float)distanceMap[x, y].Distance;
                // ReSharper disable once CompareOfFloatsByEqualityOperator
                if (dist == 0f && color.A == 0xFF)
                {
                    return(color);
                }
                if (dist > glowDistance)
                {
                    return(new ArgbRev(0, 0, 0, 0));
                }
                var genColor = ArgbRev.Interpolate(glowColor, transparentColor, 1 - function(dist / glowDistance));
                // ReSharper disable once CompareOfFloatsByEqualityOperator
                return(dist == 0 ? ArgbRev.Mix(color, genColor) : genColor);
            });
        }
Ejemplo n.º 2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="bitmap"></param>
 /// <param name="distanceMap"></param>
 /// <param name="glowDistance"></param>
 /// <param name="glowColor"></param>
 /// <param name="min"></param>
 /// <param name="max"></param>
 public static void DrawGlow(Bitmap bitmap, DistanceEntry[,] distanceMap, float glowDistance,
                             ArgbRev glowColor, float min, float max = 1.0f)
 {
     DrawGlow(bitmap, distanceMap, glowDistance, glowColor,
              f => MathUtils.SmoothStep(min, max, f));
 }