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