我试图在Windows中给出该文件的完整路径的高分辨率图标或缩略图。不要需要是一个缩略图 - 一个好看的图标将是伟大的。我不在乎它是HICON
还是HBITMAP
:我将它放在GDI +对象中并将其呈现到设备上下文中。提取文件的高分辨率图标或缩略图
我试过使用SHGetFileInfo
(在标志上有各种变化),但从来没有超过〜32x32的图标返回,这可怕地缩放到128像素或我需要的。
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
名称与得到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 !!!
其实我已经运行微软Thumbnail Providers Sample,发现它患有与BindToInterface
相同的问题。
那么,我还有什么可以尝试的建议吗?我只是想要一些图片-y,或多或少代表这个文件,比如至少100px的大小 - 只是比32x32更好...
如果自定义文件的开发人员只提供32x32图标会怎么样?你从哪里得到更大的图像?想想这个。 – Apokal 2012-08-07 09:02:26
谢谢@Apokal,无论我能得到什么,我都很开心。如果一个应用程序只有小图标,我会采取的,但我知道有像文本文件,办公文档等东西非常大的图标。我想尽我所能为那些... – MarcWan 2012-08-09 04:36:05