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 に答える