6

我正在使用 WindowsAPICodePack,获取 ShellFile 的缩略图。但是其中一些看起来像通用图标的图标 - 有黑色背景。因此,我将其设为位图并将黑色设置为透明。

问题是当它是图片的缩略图时——它不应该这样做。如何从“图标”中分辨出真正的缩略图?

我的代码:

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

谢谢

4

1 回答 1

5

你可以从另一个角度解决这个问题。可以强制 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);
    }
}
于 2013-07-11T10:46:17.377 回答