在WP8.1中,从应用程序的本地文件夹检索存储文件(视频)的缩略图。

4

我正在尝试获取应用程序包(LocalFolder)内部的StorageFile的缩略图。存储文件是媒体文件,可以是图像(jpg或png)或视频(mp4或wmv)。现在,当我尝试使用StorageFile类的GetThumbnailAsync(ThumbnailMode)方法获取缩略图时,如果文件是应用程序包内部的图像或视频,则会出现

System.Exception:找不到组件。

错误。但是,如果文件不在应用程序包内部,则相同的操作正常运行。这是我使用的代码:

    StorageFile file;
    private async void BtnGetVideo_Click(object sender, RoutedEventArgs e)
    {
        StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets\\TestImgs");
        file = await folder.GetFileAsync("SMTest.mp4");
    }

    private async void BtnGetThumb_Click(object sender, RoutedEventArgs e)
    {
        if (file != null)
        {
            BitmapImage image = new BitmapImage();
            image.SetSource(await file.GetThumbnailAsync(ThumbnailMode.VideosView));
            ImagePreview.Source = image;
        }
    }

以下是它的XAML代码:

这里是它的XAML代码:

        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button x:Name="BtnGetVideo" Content="Get a Local Video" Click="BtnGetVideo_Click"/>
            <Button x:Name="BtnGetThumb" Content="Get Thumbnails" Click="BtnGetThumb_Click"/>
            <Image x:Name="ImagePreview" Height="200"/>
        </StackPanel>

根据MSDN,你应该使用SingleItem模式来选择单个文件。然而,经过我的测试,它与jpg文件一样好用(到目前为止,我还没有能够获取视频文件的缩略图 - 它总是黑色的)。 - Romasz
2个回答

1

我知道这是一个老问题,但它会帮助那些仍在寻找解决方案的人。

以下是我经过三个小时的奋斗成功运行的代码,并且它正在工作。

using (VideoFrameReader videoFrameReader = new VideoFrameReader(newCreatedVideo))
        {
            await videoFrameReader.OpenMF();
            var image = videoFrameReader.GetFrameAsBitmap(TimeSpan.FromSeconds(0));

            videoFrameReader.Finalize();
        }

VideoFrameReader包含在哪个库中?我在我的WP8.1解决方案中找不到它... - Florian-Rh

0

这是平台已知的问题。对于公共目录中的文件,媒体服务会提取缩略图作为跟踪视频应用程序文件的一部分。

当文件位于应用程序数据容器中时,存储代码尝试使用不存在的系统缩略图提供程序提取缩略图。

除了将文件移动到公共位置、获取缩略图、保存并将文件移回之外,没有更好的解决方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接