public static double GetBrightnessCurve(double percent, int example = 0) { // P1 = 0,0 // C1 = 0.49,0.06 // P2 = 1,1 // C2 = 0.44,0.98 double brightness; // Some examples of calculating the brightness curve switch (example) { case 0: brightness = -3 * Math.Pow((percent - .66), 4) - 1.3653 * (percent - 1.029); break; case 1: brightness = -5 * Math.Pow((percent - .79), 4) - 2.5 * (percent - 0.79); break; case 2: brightness = -1.4 * Math.Pow((percent - 1), 12) - 1.37 * (percent - 1); break; case 3: { var points = new[] { new Point(1, 1), new Point(0.44, 0.98), new Point(0.49, 0.06), new Point(0, 0) }; brightness = Curves.GetBezierPoint(percent, points).Y; } break; case 4: { var points = new[] { // \draw (0,0) .. controls (0.5,0.0) and (1,2.2) .. (1,0) new Point(0.0, 0.0), new Point(0.5, 0.0), new Point(1.0, 2.2), new Point(1.0, 0.0) }; brightness = Curves.GetBezierPoint(percent, points).Y; } break; case 5: { var points = new[] { new Point(0, 0), new Point(0, 1.3), new Point(1, 1.3), new Point(1, 0) }; brightness = Curves.GetBezierPoint(percent, points).Y; } break; case 6: { // \draw (0,0) .. controls (0.6,0.1) and (1,2.2) .. (1,0); var points = new[] { new Point(0.0, 0.0), new Point(0.6, 0.1), new Point(1.0, 2.2), new Point(1.0, 0.0) }; brightness = Curves.GetBezierPoint(percent, points).Y; if (brightness > 1 || brightness < 0) { Debug.Print("Something went wrong..."); } } break; case 7: { // \draw (1,0) .. controls (-0.3,0) and (0.2,1) .. (0,1); var points = new[] { new Point(1, 0), new Point(-0.3, 0), new Point(0.2, 1), new Point(0, 1) }; brightness = Curves.GetBezierPoint(percent, points).Y; } break; case 99: { var points = new[] { new Point(1, 0.75), new Point(1, 1), new Point(0.44, 0.98), new Point(0.49, 0.06), new Point(0, 0) }; brightness = Curves.GetBezierPoint(percent, points).Y; } break; default: brightness = percent; break; } if (brightness > 1) { brightness = 1; } if (brightness < 0) { brightness = 0; } return(brightness); }