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