そのファイルへの完全なパスを指定して、Windows で高解像度のアイコンまたはサムネイルを取得しようとしています。サムネイルである必要はありません— 見栄えの良いアイコンは素晴らしいものです。かどうかは気にしませんHICON
。HBITMAP
これを GDI+ オブジェクトに入れて、デバイス コンテキストにレンダリングします。
私はSHGetFileInfo
(フラグのさまざまなバリエーションで)使用してみましたが、必要な128ピクセルに恐ろしくスケーリングする〜32x32以上のアイコンを取得することはありません。
if (!SHGetFileInfoW(path, 0, &fi, sizeof(fi),
SHGFI_ICON | SHGFI_ICONLARGE | SHGFI_TYPENAME))
return GetLastError();
// fi.hIcon is a valid icon here, but it's horrible quality with
// a black mask on it. I want higher quality, and dare I dream of
// alpha channel? Mask is acceptable, i suppose.
SHGetFileInfo
""
で呼び出すと返されますSHGFI_ICONLOCATION
(これは、その API の既知の問題のようです)。
SHCreateItemFromParsingName
また、取得するつもりで name を使用してみましIThumbnailProvider
たが、常に...をBindToHandler
返します。E_NOTIMPL
BHID_ThumbnailHandler
IShellItem *psi;
hr = SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&psi));
if (SUCCEEDED(hr))
{
IThumbnailProvider *pThumbProvider;
hr = psi->BindToHandler(NULL, BHID_ThumbnailHandler,
IID_PPV_ARGS(&pThumbProvider));
if (SUCCEEDED(hr))
{
// never get here because hr == E_NOTIMPL !!!
Microsoft Thumbnail Providers Sampleを実際に実行したところ、BindToInterface
.
それで、他に何を試すことができるかについての提案はありますか?多かれ少なかれ、このファイルを少なくとも 100px のサイズで表す画像のようなものが欲しいだけです — 32x32 よりも良いもの...