Как убрать цвет фона значков ShellFile, а не «настоящих» миниатюр - PullRequest
6 голосов
/ 02 октября 2011

Я использую WindowsAPICodePack, получаю миниатюру ShellFile.Но некоторые из тех, которые выглядят как обычные значки, имеют черный фон.Поэтому я делаю его растровым и устанавливаю черный цвет как прозрачный.

Проблема в том, что когда это миниатюра изображения, он не должен этого делать.Как я могу отличить реальный эскиз от «иконки»?

Мой код:

ShellFile sf = ShellFile.FromFilePath(path);
Bitmap bm = sf.Thumbnail.MediumBitmap;
bm.MakeTransparent(Color.Black);

Спасибо

1 Ответ

3 голосов
/ 11 июля 2013

Вы можете подойти к этой проблеме под другим углом. Можно заставить ShellFile.Thumbnail извлекать миниатюру только в том случае, если она существует, или заставить ее извлечь значок приложения.

Итак, ваш код будет выглядеть примерно так:

Bitmap bm;
using (ShellFile shellFile = ShellFile.FromFilePath(filePath))
{
    ShellThumbnail thumbnail = shellFile.Thumbnail;

    thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly;

    try
    {
        bm = thumbnail.MediumBitmap;
    }
    catch // errors can occur with windows api calls so just skip
    {
        bm = null;
    }
    if (bm == null)
    {
        thumbnail.FormatOption = ShellThumbnailFormatOption.IconOnly;
        bm = thumbnail.MediumBitmap;
        // make icon transparent
        bm.MakeTransparent(Color.Black);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...