2009-08-24 3 views
2

私は、エクスプローラを使用してサムネイルモードで画像を表示しています。 各画像(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..... 
} 
+3

まず、エクスプローラにはサムネイルキャッシュがあります。また、最初にディレクトリを読み込んだときに、ワーカースレッドなどでサムネイルが生成されている可能性があります。 –

+1

私は各フォルダストアの画像サムネイルでthumb.dbを知っていますが、削除した場合、エクスプローラは本当に速いサムネイルを再生成します – user25749

+0

複製のhttp://stackoverflow.com/questions/1316170/having-an-image-file-バッファ・イン・メモリで最も速い方法であることを実現しています。 –

答えて

1

Explorerは、おそらくExif埋め込まれたJPGサムネイルを使用しています。

Exif Image Viewerを簡単に見て、使用している画像に埋め込みサムネイルが含まれていることを確認してください。

1

私の場合、Explorerはサムネイルを痛烈に遅く生成します。自分のコードは、サムネイルを生成するためにはるかに高速です。私が実行した問題は、 "ファイル名"システムの代わりに "ファイルオブジェクト"システムを使用するため、FindFirst/FindNextがエクスプローラと比較して遅いということです。ディレクトリ内のファイル名を取得するための高速なコードを探したいと思います。

+0

同じです。 'thumbs.db'から画像を読んでいるのは速いです。さもなければ非常に長い時間がかかります。 –

関連する問題