2009-08-24 9 views
2

J'utilise l'explorateur pour voir l'image en mode miniature. Il est vraiment rapide d'obtenir une vignette de chaque image (bmp, jpg). J'utilise le code suivant pour générer des vignettes pour chaque image. Cependant, il est beaucoup plus lent que l'explorateur, Comment puis-je écrire une partie du code pour générer des vignettes aussi vite que le système et précis (thumbnail généré par le code suivant ont parfois une bande noire en haut et en bas, ou sur le côté gauche, Je ne sais pas pourquoi ...). Ou puis-je imaginer l'API de l'explorateur pour générer une miniature en utilisant sa fonction?explorer obtenir la vignette de l'image très vite, comment ça marche?

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..... 
} 
+3

Pour commencer, l'explorateur a probablement un cache de vignettes, et génère probablement des vignettes dans un thread de travail ou quelque chose quand vous chargez le répertoire pour la première fois. –

+1

Je sais thumb.db dans chaque dossier stocker des vignettes d'image, cependant, si je le supprime, l'explorateur va régénérer les vignettes très rapidement – user25749

+0

en double de http://stackoverflow.com/questions/1316170/having-an-image-file- buffer-in-memory-comment-est-le-moyen-le-plus-rapide-de-créer-son-thum? –

Répondre

1

Explorer utilise probablement la vignette jpg Exif intégré.

Jetez un oeil à un simple Exif Image Viewer pour confirmer que les images que vous utilisez contiennent une miniature incorporée.

1

Pour moi, Explorer génère des vignettes douloureusement lente. Mon propre code s'exécute beaucoup plus rapidement pour générer des vignettes. Le problème que j'ai rencontré est que FindFirst/FindNext sont lents par rapport à Explorer car il utilise le système "objet de fichier" au lieu du système "nom de fichier". Je voudrais trouver le code rapide pour obtenir les noms de fichiers dans les répertoires.

+0

Même ici. Ce n'est que rapide si vous lisez les images de 'thumbs.db', ​​sinon cela prend beaucoup de temps. –