如何删除背景颜色的ShellFile“图标”,但不是“真正的”缩略图

本文关键字:略图 真正的 何删除 背景 删除 颜色 图标 ShellFile | 更新日期: 2023-09-27 18:10:25

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

问题是,当它是一个图片的缩略图-它不应该这样做。如何区分真正的缩略图和"图标"?

我代码:

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

谢谢

如何删除背景颜色的ShellFile“图标”,但不是“真正的”缩略图

你可以从另一个角度来处理这个问题。可以强制使用ShellFile。如果存在缩略图,则仅提取缩略图,或者强制提取关联的应用程序图标。

所以你的代码看起来像这样:
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);
    }
}