Как получить миниатюры из файла - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть приложение winform, которое соединяет приложение для технического рисования (CAD - SolidEdge) и ERP-систему. Это работает нормально, но я не могу получить правильные миниатюры в структуре бомбы.

Когда я нажимаю на файл в Windows (Windows 10), я вижу хорошее изображение для предварительного просмотра. Как извлечь это изображение в свое приложение?

Я нашел похожий вопрос и решение ( Извлечь миниатюру для любого файла в Windows), но это больше не будет работать ( из-за Windows 10 обновлений, я думаю).

Также этот (C# получить эскиз из файла через windows api ) не работает и дает: Пример неправильного эскиза и Пример неправильного эскиза .

Ребята, вы знаете, как решить эту проблему? Спасибо !!

1 Ответ

0 голосов
/ 28 апреля 2020

Существуют различные типы миниатюр, которые можно извлечь из Windows.

  1. Изображение
  2. Альбом композиций
  3. Значок документа
  4. Папка
  5. Файловая группа
  6. Отдельный элемент

У Microsoft есть хороший пример проекта FileThumbnails , который позволяет вам играть с каждым типом. Этот проект был обновлен для Windows10 и VS 2019 в марте 2020 года. Хотя это универсальный windows проект вместо winforms.

После игры с различными режимами я нашел тот, который вам нужен, для Solid Пограничные файлы: # 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: {4}x{5}",
                                       thumbnailModeName,
                                       isGroup ? "Group" : item.IsOfType(StorageItemTypes.File) ? "File" : "Folder",
                                       item.Name,
                                       size,
                                       thumbnail.OriginalWidth,
                                       thumbnail.OriginalHeight);
    }

Пример результата:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...