如何从文件中获取缩略图

Posted

技术标签:

【中文标题】如何从文件中获取缩略图【英文标题】:How to get thumbnails from a file 【发布时间】:2020-08-03 00:41:18 【问题描述】:

我已经构建了一个连接技术绘图应用程序 (CAD - SolidEdge) 和 ERP 系统的 winform 应用程序。这工作正常,但我无法在 bomstructure 中获得正确的缩略图。

当我在 Windows (Windows 10) 中单击一个文件时,我会看到一个漂亮的预览图像。如何将此图像提取到我的应用程序中?

我找到了一个类似的问题和解决方案 (Extract thumbnail for any file in Windows),但这将不再有效(我猜是因为 Windows 10 更新)。

这个 (C# get thumbnail from file via windows api) 也不起作用并给出:Example wrong thumbnail 和 Example wrong thumbnail。

你们知道如何解决这个问题吗?谢谢!!

【问题讨论】:

是的,在我的问题中,我提到了这个线程作为非工作选项(对我来说)。 【参考方案1】:

可以从 Windows 检索到不同类型的缩略图。

    图片 歌曲专辑封面 文档图标 文件夹 文件组 单件

Microsoft 有一个很好的示例项目,名为FileThumbnails,可让您使用每种类型。本项目于 2020 年 3 月针对 Windows10 和 VS 2019 进行了更新。虽然它是通用的 windows 项目,而不是 winforms。

在玩了不同的模式后,我发现你所追求的 Solid Edge 文件是 #6。


internal class FileExtensions

    public static readonly string[] SEfiles    = new string[]  ".dft", ".par", ".asm" ;


FileOpenPicker openPicker = new FileOpenPicker();
foreach (string extension in FileExtensions.SEfiles)

    openPicker.FileTypeFilter.Add(extension);


StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)

    const ThumbnailMode thumbnailMode = ThumbnailMode.SingleItem;

    bool fastThumbnail = FastThumbnailCheckBox.IsChecked.Value;
    ThumbnailOptions thumbnailOptions = ThumbnailOptions.UseCurrentScale;
    if (fastThumbnail)
    
        thumbnailOptions |= ThumbnailOptions.ReturnOnlyIfCached;
    

    using (StorageItemThumbnail thumbnail = await file.GetScaledImageAsThumbnailAsync(thumbnailMode, size, thumbnailOptions))
    
        if (thumbnail != null)
        
            MainPage.DisplayResult(ThumbnailImage, OutputTextBlock, thumbnailMode.ToString(), size, file, thumbnail, false);
        
        else
        
            rootPage.NotifyUser(Errors.NoThumbnail, NotifyType.StatusMessage);
        
    


public static void DisplayResult(Image image, TextBlock textBlock, string thumbnailModeName, uint size, IStorageItem item, StorageItemThumbnail thumbnail, bool isGroup)

    BitmapImage bitmapImage = new BitmapImage();
    bitmapImage.SetSource(thumbnail);
    image.Source = bitmapImage;

    textBlock.Text = String.Format("ThumbnailMode.0\n"
                                       + "1 used: 2\n"
                                       + "Requested size: 3\n"
                                       + "Returned size: 4x5",
                                       thumbnailModeName,
                                       isGroup ? "Group" : item.IsOfType(StorageItemTypes.File) ? "File" : "Folder",
                                       item.Name,
                                       size,
                                       thumbnail.OriginalWidth,
                                       thumbnail.OriginalHeight);
    

结果示例:

【讨论】:

以上是关于如何从文件中获取缩略图的主要内容,如果未能解决你的问题,请参考以下文章

如何创建从Android视频文件路径视频缩略图

如何从 iOS 9 和 Objective C 中的 .MOV 文件中获取缩略图?

Android:如何获取应用程序私有文件的视频缩略图?

android4.4 中如何获取最近应用的缩略图

如何从嵌入式视频中获取缩略图?

如何从 facebook 获取其他人或页面视频缩略图?