2014-02-13 50 views
0

我在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個視頻的屬性在調試器中具有相同的信息。

回答

0

移動player.Close();在函數底部渲染解決了我的問題。