【发布时间】:2016-09-15 00:52:53
【问题描述】:
是否可以在通用 Windows 应用程序中加载视频并从中提取单个帧(作为图像)?
【问题讨论】:
是否可以在通用 Windows 应用程序中加载视频并从中提取单个帧(作为图像)?
【问题讨论】:
有两个命名空间可让您获取帧:
【讨论】:
是否可以在通用 Windows 应用程序中加载视频并从中提取单个帧(作为图像)?
您可以使用MediaComposition.GetThumbnailAsync 从视频中获取图像流。然后您可以使用RandomAccessStream.CopyAsync 将IInputStream 转换为InMemoryRandomAccessStream。我们可以添加 IRandomAccessStream 来设置BitmapSource.SetSource。
例如:
private async void Button_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
foreach (string extension in FileExtensions.Video)
{
openPicker.FileTypeFilter.Add(extension);
}
StorageFile file = await openPicker.PickSingleFileAsync();
var thumbnail = await GetThumbnailAsync(file);
BitmapImage bitmapImage = new BitmapImage();
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
await RandomAccessStream.CopyAsync(thumbnail, randomAccessStream);
randomAccessStream.Seek(0);
bitmapImage.SetSource(randomAccessStream);
MyImage.Source = bitmapImage;
}
public async Task<IInputStream> GetThumbnailAsync(StorageFile file)
{
var mediaClip = await MediaClip.CreateFromFileAsync(file);
var mediaComposition = new MediaComposition();
mediaComposition.Clips.Add(mediaClip);
return await mediaComposition.GetThumbnailAsync(
TimeSpan.FromMilliseconds(5000), 0, 0, VideoFramePrecision.NearestFrame);
}
internal class FileExtensions
{
public static readonly string[] Video = new string[] { ".mp4", ".wmv" };
}
【讨论】: