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;
}

ビデオのサムネイルを取得すると、常に機能します。
プレゼンテーション (pptx) サムネイルを取得すると、正しく動作しません (いつ動作し、いつ動作しないのかわかりません)。

たとえば、ディレクトリに 2 つのファイルがあります。
ここに画像の説明を入力

そして、これは私のプログラムでどのように見えるかです - 1はOKで1はそうではありません(両方がOKの場合もあれば、両方がそうでない場合もあります):
ここに画像の説明を入力

何が問題なのか教えていただければ幸いです。または、失敗しないサムネイルを取得する別の方法を教えていただければ幸いです...

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 サムネイルを取得するためだけのものです。docx、xlsx などのすべての Office xml ファイルで動作すると想定しています...

于 2013-09-24T16:55:35.773 に答える