private static Image Render(IPeakProvider peakProvider, WaveFormRendererSettings settings) { if (settings.DecibelScale) { peakProvider = new DecibelPeakProvider(peakProvider, 48); } var b = new Bitmap(settings.Width, settings.TopHeight + settings.BottomHeight); if (settings.BackgroundColor == Color.Transparent) { b.MakeTransparent(); } using (var g = Graphics.FromImage(b)) using (var backgroundBrush = settings.BackgroundBrush.Clone() as Brush) using (var topPeakPen = settings.TopPeakPen.Clone() as Pen) using (var bottomPeakPen = settings.BottomPeakPen.Clone() as Pen) //using (var topSpacerPen = settings.TopSpacerPen.Clone() as Pen) //using (var bottomSpacerPen = settings.BottomSpacerPen.Clone() as Pen) { g.FillRectangle(backgroundBrush, 0, 0, b.Width, b.Height); var midPoint = settings.TopHeight; var x = 0; var currentPeak = peakProvider.GetNextPeak(); while (x < settings.Width) { var nextPeak = peakProvider.GetNextPeak(); for (var n = 0; n < settings.PixelsPerPeak; n++) { var lineHeight = settings.TopHeight * currentPeak.Max; g.DrawLine(topPeakPen, x, midPoint, x, midPoint - lineHeight); lineHeight = settings.BottomHeight * currentPeak.Min; g.DrawLine(bottomPeakPen, x, midPoint, x, midPoint - lineHeight); x++; } for (var n = 0; n < settings.SpacerPixels; n++) { // spacer bars are always the lower of the var max = Math.Min(currentPeak.Max, nextPeak.Max); var min = Math.Max(currentPeak.Min, nextPeak.Min); var lineHeight = settings.TopHeight * max; g.DrawLine(settings.TopSpacerPen, x, midPoint, x, midPoint - lineHeight); lineHeight = settings.BottomHeight * min; g.DrawLine(settings.BottomSpacerPen, x, midPoint, x, midPoint - lineHeight); x++; } currentPeak = nextPeak; } } return(b); }
private static Image Render(IPeakProvider peakProvider, WaveFormRendererSettings settings) { Log.Information(rrender + "Render started"); if (settings.DecibelScale) { peakProvider = new DecibelPeakProvider(peakProvider, 48); } var b = new Bitmap(settings.Width, settings.TopHeight + settings.BottomHeight); if (settings.BackgroundColor == Color.Transparent) { b.MakeTransparent(); } using (var g = Graphics.FromImage(b)) { g.FillRectangle(settings.BackgroundBrush, 0, 0, b.Width, b.Height); var midPoint = settings.TopHeight; int x = 0; var currentPeak = peakProvider.GetNextPeak(); while (x < settings.Width) { var nextPeak = peakProvider.GetNextPeak(); //for (int n = 0; n < settings.PixelsPerPeak; n++) //{ var lineHeight = settings.TopHeight * currentPeak.Max; g.DrawLine(settings.TopPeakPen, x, midPoint, x, midPoint - lineHeight); lineHeight = settings.BottomHeight * currentPeak.Min; g.DrawLine(settings.BottomPeakPen, x, midPoint, x, midPoint - lineHeight); x++; //} /*for (int n = 0; n < settings.SpacerPixels; n++) * { * // spacer bars are always the lower of the * var max = Math.Min(currentPeak.Max, nextPeak.Max); * var min = Math.Max(currentPeak.Min, nextPeak.Min); * * var lineHeight = settings.TopHeight * max; * g.DrawLine(settings.TopSpacerPen, x, midPoint, x, midPoint - lineHeight); * lineHeight = settings.BottomHeight * min; * g.DrawLine(settings.BottomSpacerPen, x, midPoint, x, midPoint - lineHeight); * x++; * }*/ currentPeak = nextPeak; } } Log.Information(rrender + "Render finished"); return(b); }