explorer очень быстро получает эскиз изображения, как это работает? - PullRequest
2 голосов
/ 24 августа 2009

Я использую проводник для просмотра изображений в режиме миниатюр. Очень быстро получить эскиз каждого изображения (BMP, JPG).

Я использую следующий код для создания миниатюр для каждого изображения. однако это намного медленнее, чем проводник. Как я могу написать часть кода, чтобы генерировать миниатюру так быстро, как системно и точно (миниатюра, генерируемая следующим кодом, иногда имеет черную полосу сверху и снизу или слева и справа, не знаю почему ...). Или я могу вызвать API проводника для создания эскиза, используя его функцию?

Bitmap sourceImg(xxx);
int nSize = sourceImg.GetPropertyItemSize(PropertyTagThumbnailData);
if(nSize > 0)
    {
    PropertyItem * pItem = (PropertyItem*)malloc(nSize);
    if (pItem != NULL)
    {
        sourceImg.GetPropertyItem(PropertyTagThumbnailData, nSize, pItem);
    }
    GenerateThumbnail from pItem.....
}

Ответы [ 2 ]

1 голос
/ 05 сентября 2009

Для меня Explorer генерирует миниатюры мучительно медленно. Мой собственный код работает намного быстрее для создания миниатюр. Проблема, с которой я столкнулся, заключается в том, что FindFirst / FindNext медленнее по сравнению с Explorer, потому что он использует систему «файловый объект» вместо системы «имя файла». Я хотел бы найти быстрый код, чтобы получить имена файлов в каталогах.

1 голос
/ 24 августа 2009

Проводник, вероятно, использует Exif миниатюру jpg.

Взгляните на простой Exif Image Viewer , чтобы убедиться, что используемые вами изображения содержат встроенный эскиз.

...