internal static Bitmap CreatePowerCurvePreview(ArcticFoxConfiguration.PowerCurve powerCurve, Size size) { const float percentMaxValue = 250; var actualMaxTime = powerCurve.Points.Max(x => x.Time) / 10f; var actualWidth = size.Width - 1; var actualHeight = size.Height - 1; var bitmap = new Bitmap(size.Width, size.Height); using (var gfx = Graphics.FromImage(bitmap)) { gfx.Clear(Color.White); var chartPoints = new PointF[powerCurve.Points.Length]; for (var i = 0; i < powerCurve.Points.Length; i++) { var powerPoint = powerCurve.Points[i]; var xRaw = powerPoint.Time / 10f; var yRaw = powerPoint.Percent; // 4 is a sum of 2 pixel paddings from left and right. var x = xRaw * (actualWidth - 4) / actualMaxTime; var y = actualHeight - yRaw * actualHeight / percentMaxValue; // Realize padding from left by 2 pixels. chartPoints[i] = new PointF(x + 2, y); } DrawGrid(gfx, 10, 5, actualWidth, actualHeight); gfx.DrawLines(new Pen(Color.YellowGreen, 1), chartPoints); gfx.DrawRectangle(Pens.LightGray, 0, 0, actualWidth, actualHeight); } return(bitmap); }
public PowerCurveProfileWindow([NotNull] ArcticFoxConfiguration.PowerCurve curve) { if (curve == null) { throw new ArgumentNullException("curve"); } m_curve = curve; InitializeComponent(); InitializeChart(); InitializeControls(); InitializeWorkspace(); Load += (s, e) => ZoomChart(m_timeFrame); }