public static ImageSource GetThumbnailFromVideo(string filename, TimeSpan interval, int height)
{
//configurations.the_flag++;
MediaPlayer _mediaPlayer = new MediaPlayer();
_mediaPlayer.MediaOpened += new EventHandler(configurations._mediaPlayer_MediaOpened);
_mediaPlayer.BufferingEnded += new EventHandler(configurations._mediaPlayer_MediaOpened);
_mediaPlayer.ScrubbingEnabled = true;
_mediaPlayer.Open(new Uri(configurations.GetAbsoluteContributionPath() + filename));
_mediaPlayer.Pause();
//_mediaPlayer.Position = interval;
System.Threading.Thread.Sleep(5 * 1000);
//while (the_flag != 0) { System.Threading.Thread.Sleep(1000); }
_mediaPlayer.Position = interval;
ImageSource src = new BitmapImage(new Uri(configurations.GetAbsoluteImagePath() + video_image_pic));
src.Freeze();
//uint[] framePixels = new uint[width * height];
// Render the current frame into a bitmap
var drawingVisual = new DrawingVisual();
try
{
int width = height;
if (_mediaPlayer.NaturalVideoWidth * _mediaPlayer.NaturalVideoHeight != 0)
width = height * _mediaPlayer.NaturalVideoWidth / _mediaPlayer.NaturalVideoHeight;
using (var drawingContext = drawingVisual.RenderOpen())
{
drawingContext.DrawVideo(_mediaPlayer, new System.Windows.Rect(0, 0, width, height));
drawingContext.DrawImage(src, new System.Windows.Rect(0, 0, width, height));
//drawingContext.DrawVideo(_mediaPlayer, new System.Windows.Rect(0, 0, height, height));
//drawingContext.DrawImage(src, new System.Windows.Rect(0, 0, height, height));
}
var renderTargetBitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
//var renderTargetBitmap = new RenderTargetBitmap(height, height, 96, 96, PixelFormats.Default);
renderTargetBitmap.Render(drawingVisual);
return (ImageSource)renderTargetBitmap;
}
catch (Exception exc) { log.WriteErrorLog(exc); return null; }
}