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);
        }
示例#2
0
        /// <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));
        }