0

我有以下功能来获取BitmapImage文件。

public static BitmapImage GetThumbnail(string filePath)
{
    ShellFile shellFile = ShellFile.FromFilePath(filePath);
    BitmapSource shellThumb = shellFile.Thumbnail.ExtraLargeBitmapSource;

    BitmapImage bImg = new BitmapImage();
    PngBitmapEncoder encoder = new PngBitmapEncoder();
    MemoryStream memoryStream = new MemoryStream();
    encoder.Frames.Add(BitmapFrame.Create(shellThumb));
    encoder.Save(memoryStream);
    bImg.BeginInit();
    bImg.StreamSource = memoryStream;
    bImg.EndInit();

    return bImg;
}

当我得到视频的缩略图时,它总是有效的。
当我得到 Presentation (pptx) Thumbnail 时,它无法正常工作(我不知道什么时候可以,什么时候不可以)。

例如,我在目录中有 2 个文件:
在此处输入图像描述

这就是它在我的程序中的样子 - 1 可以,1 不是(有时两者都可以,有时两者都不是):
在此处输入图像描述

如果您能告诉我问题出在哪里,或者给我另一种获取不会失败的缩略图的方法,我将不胜感激......

ps
我想提醒一下,对于视频文件,它可以 100% 正常工作(.mp3、.mp4、.wmv - 这就是我测试过的)

4

1 回答 1

0

由于我想获取 pptx 缩略图,所以我想出了以下解决方案:
1. 我使用 DotNetZip 提取了缩略图
2. 我得到了位于 docProps 目录
中的缩略图 3. 我将缩略图提取为memoryStream
4. 我将其转换memoryStreamBitmapImage和退回它。

这是代码:

public static BitmapImage GetPPTXThumbnail(string filePath)
{
    using (ZipFile zip = ZipFile.Read(filePath))
    {
        ZipEntry e = zip["docProps/thumbnail.jpeg"];

        BitmapImage bImg = new BitmapImage();
        MemoryStream memoryStream = new MemoryStream();
        bImg.BeginInit();
        e.Extract(memoryStream);
        memoryStream.Seek(0, SeekOrigin.Begin);
        bImg.StreamSource = memoryStream;
        bImg.EndInit();

        return bImg;
    }
}

此解决方案不能失败,此解决方案仅用于获取 PPTX Thumbnail,我假设它适用于所有 office xml 文件,例如 docx、xlsx 等...

于 2013-09-24T16:55:35.773 回答