public static void ReadMP3CoverArt(string source, Guid mediaViewModelId, Delegates.GenerateThumbnailDone setter)
        {
            TagLib.File file = TagLib.File.Create(source);

            if (file.Tag.Pictures.Length >= 1)
            {
                byte[] bytes = file.Tag.Pictures[0].Data.Data;

                var bitmapImage = new BitmapImage();
                bitmapImage.BeginInit();
                bitmapImage.StreamSource = new MemoryStream(bytes);
                bitmapImage.EndInit();

                setter((BitmapSource)bitmapImage.GetCurrentValueAsFrozen(), mediaViewModelId, null);
            }
        }
Example #2
0
        public static void GenerateThumbnailOfPicture(string source, Guid mediaViewModelId, Delegates.GenerateThumbnailDone setter)
        {
            BitmapSource ret;
            //BitmapMetadata meta = null;

            //tentative de creation du thumbnail via Bitmap frame : très rapide et très peu couteux en mémoire !
            BitmapFrame frame = BitmapFrame.Create(new Uri(source), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);

            if (frame.Thumbnail == null)             //echec, on tente avec BitmapImage (plus lent et couteux en mémoire)
            {
                BitmapImage image = new BitmapImage();
                image.DecodePixelHeight = 90;                 //on limite à 90px de hauteur
                image.BeginInit();
                image.UriSource     = new Uri(source);
                image.CacheOption   = BitmapCacheOption.None;
                image.CreateOptions = BitmapCreateOptions.DelayCreation;                 //important pour les performances
                image.EndInit();

                if (image.CanFreeze)                 //pour éviter les memory leak
                {
                    image.Freeze();
                }

                ret = image;
            }
            else
            {
                //récupération des métas de l'image
                //meta = frame.Metadata as BitmapMetadata;
                ret = frame.Thumbnail;
            }

            #region   TheBlackReverand : on deactive la gestion de l'orientation dans 1 premier temps

            //    public enum ExifOrientations
            //    {
            //        None = 0,
            //        Normal = 1,
            //        HorizontalFlip = 2,
            //        Rotate180 = 3,
            //        VerticalFlip = 4,
            //        Transpose = 5,
            //        Rotate270 = 6,
            //        Transverse = 7,
            //        Rotate90 = 8
            //    }

            //if ((meta != null) && (ret != null)) //si on a des meta, tentative de récupération de l'orientation
            //{

            //    if (meta.GetQuery("/app1/ifd/{ushort=274}") != null)
            //    {
            //        orientation = (ExifOrientations)Enum.Parse(typeof(ExifOrientations), meta.GetQuery("/app1/ifd/{ushort=274}").ToString());
            //    }

            //    double angle = 0;
            //    switch (orientation)
            //    {
            //        case ExifOrientations.Rotate90:
            //            angle = -90;
            //            break;
            //        case ExifOrientations.Rotate180:
            //            angle = 180;
            //            break;
            //        case ExifOrientations.Rotate270:
            //            angle = 90;
            //            break;
            //    }

            //    if (angle != 0) //on doit effectuer une rotation de l'image
            //    {
            //        ret = new TransformedBitmap(ret.Clone(), new RotateTransform(angle));
            //        ret.Freeze();
            //    }
            //}

            #endregion

            if (ret != null)
            {
                setter((BitmapSource)ret.GetCurrentValueAsFrozen(), mediaViewModelId, null);
            }
        }
Example #3
0
        public static void CaptureScreen(Uri source, Guid mediaViewModelId, Dictionary <TimeSpan, object> captureList, double scale, Delegates.GenerateThumbnailDone finalWorkerPrimary, Delegates.GenerateThumbnailDone finalWorkerThumbnail)
        {
            Mutex mutexLock = new Mutex(false, source.GetHashCode().ToString());

            mutexLock.WaitOne();

            MediaPlayer player = new MediaPlayer {
                IsMuted = true, ScrubbingEnabled = true
            };

            player.Open(source);
            player.Pause();

            foreach (var pair in captureList)
            {
                TimeSpan timeSpan   = pair.Key;
                object   timeSpanId = pair.Value;

                player.Position = timeSpan;

                int width = 0, height = 0, cpt = 0;
                // Afin de compenser les temps d'acces on accord 10 essai avec 1s entre chaque essai
                while (width == 0 || height == 0 && cpt < 10)
                {
                    Thread.Sleep(1000);
                    width  = player.NaturalVideoWidth;
                    height = player.NaturalVideoHeight;

                    cpt++;
                }

                RenderTargetBitmap rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
                DrawingVisual      dv  = new DrawingVisual();

                using (DrawingContext dc = dv.RenderOpen())
                {
                    dc.DrawVideo(player, new Rect(0, 0, width, height));
                }

                rtb.Render(dv);
                var frame = BitmapFrame.Create(rtb).GetCurrentValueAsFrozen();

                if (finalWorkerPrimary != null)
                {
                    finalWorkerPrimary(frame as BitmapFrame, mediaViewModelId, timeSpanId);
                }

                if (scale > 0 && finalWorkerThumbnail != null && frame is BitmapSource)
                {
                    var thumbnailFrame = BitmapFrame.Create(new TransformedBitmap(frame as BitmapSource, new ScaleTransform(scale, scale))).GetCurrentValueAsFrozen();

                    finalWorkerThumbnail(thumbnailFrame as BitmapFrame, mediaViewModelId, timeSpanId);
                }
            }

            player.Close();
            mutexLock.ReleaseMutex();
        }
Example #4
0
 public static void CaptureScreen(string source, Guid mediaViewModelId, TimeSpan timeSpan, object timeSpanId, double scale, Delegates.GenerateThumbnailDone finalWorkerPrimary, Delegates.GenerateThumbnailDone finalWorkerThumbnail)
 {
     CaptureScreen(new Uri(source), mediaViewModelId, new Dictionary <TimeSpan, object> {
         { timeSpan, timeSpanId }
     }, scale, finalWorkerPrimary, finalWorkerThumbnail);
 }
Example #5
0
 public static void CaptureScreen(Uri source, Guid mediaViewModelId, Dictionary <TimeSpan, object> captureList, Delegates.GenerateThumbnailDone finalWorkerPrimary)
 {
     CaptureScreen(source, mediaViewModelId, captureList, -1, finalWorkerPrimary, null);
 }
Example #6
0
 public static void CaptureScreen(Uri source, Guid mediaViewModelId, TimeSpan timeSpan, object timeSpanId, Delegates.GenerateThumbnailDone finalWorkerPrimary)
 {
     CaptureScreen(source, mediaViewModelId, timeSpan, timeSpanId, -1, finalWorkerPrimary, null);
 }