[WPF] Comment créer une miniature d'une vidéo ?
Pour les besoins d'un projet récent, il m'a fallut trouver le moyen de créer une miniature d'une vidéo, sous forme d'image.
Après avoir parcouru le Web à la recherche d'une solution, je suis tomber sur le code suivant, qui s'avère être complètement fonctionnel:
// Create a screenshot of the video
VideoDrawing vd = new VideoDrawing();
m_Player.Open(new Uri(this.tbFile.Text, UriKind.Relative));
vd.Rect = new Rect(0, 0, 120, 100);
vd.Player = m_Player;
m_Player.MediaOpened += new EventHandler(player_MediaOpened);
m_Player.Play();
m_Player.Position = TimeSpan.FromSeconds(2);
private void player_MediaOpened(object sender, EventArgs e)
{
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
drawingContext.DrawVideo(m_Player, new Rect(new Point(0, 0), new Point(120, 100)));
drawingContext.Close();
RenderTargetBitmap rtb = new RenderTargetBitmap(120, 100, 96, 96, PixelFormats.Pbgra32);
rtb.Render(drawingVisual);
m_Player.Stop();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
MemoryStream ms = new MemoryStream();
encoder.Save(ms);
var byteArrayImage = ms.ToArray();
}
A la fin de la méthode player_MediaOpened, vous disposez d'une Stream que vous pouvez convertir en image pour l'enregistrer ensuite sur le disque dur de la machine 
A+
Edit: Merci à Yi-Lun Luo, auteur de cette source, de l'avoir mis à disposition ici: http://silverlight.net/forums/t/14104.aspx
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :