视频缩略图随机返回黑色图像

时间:2014-02-13 03:27:39

标签: c# wpf

我在WPF工作并创建一个库文件夹,我想在系统中的文件夹中显示视频的视频缩略图。我在C#中编写了以下代码来获取视频缩略图。

 private BitmapSource RenderThumb(Uri uri)
        {
            var player = new MediaPlayer { Volume = 0, ScrubbingEnabled = true };
            player.Open(uri);
            Thread.Sleep(3000);
            player.Pause();
            player.Position = player.NaturalDuration.HasTimeSpan
                                  ? TimeSpan.FromSeconds(player.NaturalDuration.TimeSpan.TotalSeconds / 2)
                                  : TimeSpan.FromSeconds(2);
            int width = player.NaturalVideoWidth;
            int height = player.NaturalVideoHeight;

            if (width == 0 || height == 0)
            {
                throw new InvalidOperationException("Width or Height cannot be 0");
            }

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

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


            Freezable frame = BitmapFrame.Create(rtb).GetCurrentValueAsFrozen();
            Freezable smallerFrame =
                BitmapFrame.Create(new TransformedBitmap(source: frame as BitmapSource, newTransform: new ScaleTransform(0.5, 0.5))).
                    GetCurrentValueAsFrozen();



            return smallerFrame as BitmapSource;
        }

然而,如果我尝试加载10个视频的缩略图,那么我每次都会获得2个3个视频的空白/黑色缩略图,而其他所有视频的加载都很好。这种行为是随机的,有时我得到最后3个视频的空白缩略图,有时前3个视频,所以我不知道在哪里寻找我的问题的解决方案。我尝试查看BitmapSource的属性,但所有10个视频的属性在调试器中都具有相同的信息。

1 个答案:

答案 0 :(得分:0)

渲染后在函数底部移动player.Close();为我解决了问题。