Estoy tratando de obtener un ícono o miniatura en alta resolución en Windows con una ruta completa a ese archivo. No es necesario que sea una miniatura; un buen ícono será genial. No me importa si es un HICON
o un HBITMAP
: lo pondré en un objeto GDI + y lo renderizaré en el contexto de un dispositivo.Extracto Icono o miniatura de alta resolución para el archivo
He intentado usar SHGetFileInfo
(con varias variaciones en los indicadores), pero nunca obtengo más que un ícono de ~ 32x32, que se puede escalar horriblemente a los 128 píxeles que necesito.
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
vuelve ""
cuando llamo con SHGFI_ICONLOCATION
(que parece ser un problema conocido con esa API).
También he intentado usar SHCreateItemFromParsingName
nombre con la intención de conseguir IThumbnailProvider
, pero BindToHandler
siempre devuelve E_NOTIMPL
para 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 !!!
De hecho, me he quedado el Microsoft Thumbnail Providers Sample y encontraron que sufre de el mismo problema con BindToInterface
.
¿Alguna sugerencia sobre qué más podría probar? Solo quiero algo que represente más o menos este archivo en, digamos, al menos 100 px de tamaño, cualquier cosa mejor que 32x32 ...
¿Qué sucede si los desarrolladores de archivos personalizados solo proporcionan un icono de 32x32? ¿De dónde obtienes una imagen más grande? Piensa sobre esto. – Apokal
Gracias @Apokal, estoy contento con lo que sea que pueda obtener. Si una aplicación solo tiene íconos pequeños, la tomaré, pero sé que hay iconos muy grandes para cosas como archivos de texto, documentos de Office, etc. Me gustaría obtener lo mejor que puedo para esos ... – MarcWan