public static Image FrameSonogram(Image image, Image titleBar, TimeSpan minuteOffset, TimeSpan xAxisTicInterval, TimeSpan xAxisPixelDuration, TimeSpan labelInterval, int nyquist, int herzInterval) { double secondsDuration = xAxisPixelDuration.TotalSeconds * image.Width; var fullDuration = TimeSpan.FromSeconds(secondsDuration); // init frequency scale int frameSize = image.Height; var freqScale = new FrequencyScale(nyquist, frameSize, herzInterval); SpectrogramTools.DrawGridLinesOnImage((Bitmap)image, minuteOffset, fullDuration, xAxisTicInterval, freqScale); int imageWidth = image.Width; int trackHeight = 20; int imageHt = image.Height + trackHeight + trackHeight + trackHeight; var timeBmp = DrawTimeTrack(minuteOffset, xAxisPixelDuration, xAxisTicInterval, labelInterval, imageWidth, trackHeight, "Seconds"); var compositeBmp = new Bitmap(imageWidth, imageHt); //get canvas for entire image var gr = Graphics.FromImage(compositeBmp); gr.Clear(Color.Black); int offset = 0; gr.DrawImage(titleBar, 0, offset); //draw in the top time scale offset += timeBmp.Height; gr.DrawImage(timeBmp, 0, offset); //draw offset += titleBar.Height; gr.DrawImage(image, 0, offset); //draw offset += image.Height; gr.DrawImage(timeBmp, 0, offset); //draw return(compositeBmp); }
/// <summary> /// This method assumes that the height of the passed sonogram image is half of the original frame size. /// This assumption allows the frequency scale grid lines to be placed at the correct intervals. /// </summary> public static Image FrameSonogram( Image sonogramImage, Image titleBar, TimeSpan minuteOffset, TimeSpan xAxisTicInterval, TimeSpan xAxisPixelDuration, TimeSpan labelInterval, int nyquist, int hertzInterval) { double secondsDuration = xAxisPixelDuration.TotalSeconds * sonogramImage.Width; var fullDuration = TimeSpan.FromSeconds(secondsDuration); // init frequency scale int frameSize = sonogramImage.Height * 2; var freqScale = new FrequencyScale(nyquist, frameSize, hertzInterval); SpectrogramTools.DrawGridLinesOnImage((Bitmap)sonogramImage, minuteOffset, fullDuration, xAxisTicInterval, freqScale); int imageWidth = sonogramImage.Width; var timeBmp = ImageTrack.DrawShortTimeTrack(minuteOffset, xAxisPixelDuration, xAxisTicInterval, labelInterval, imageWidth, "Seconds"); Image[] imageArray = { titleBar, timeBmp, sonogramImage, timeBmp }; return(ImageTools.CombineImagesVertically(imageArray)); }