(XP+VB&) いつもお世話になります。
画像ファイルを一覧するのにエクスプローラの「縮小版」のようなものを作りました。Image1()をコントロール配列にしてStretch=Trueにし、取得した画像サイズから縦横のサイズを指定して直接Image1()に画像をロードするという方法で作りましたが見た目にはエクスプローラに劣らないようなものができました。
しかし出来上がってエクスプローラと比較すると表示時間でかなり差があると感じられます。そこでサムネールに関する技を探しているのですが見つかりません。 この問題の解決法、関係する記事とかサンプルコードなどお分かりの方がおられましたら教えてください。よろしくお願いします。
> VB&
(^^;
> サムネールに関する技
縮小画像を生成する手法を知りたい(開発効率/処理効率/品質等の良し悪しを抜きにして)、という話なら、
PictureBox に PaintPicture するとか、GdipGetImageThumbnail APIで生成するとか……。
> 表示時間でかなり差があると感じられます。
Stretch 指定で表示した場合、フルサイズの画像がロードされてから縮小表示するため、
どうしても遅くなってしまうでしょうね。
エクスプローラの場合、thumbs.db というファイルをフォルダに作成し、そこに、縮小した画像を
キャッシュとして保存することで、2回目以降の表示を高速化しているようです。
また、1回目の表示に関しても、
全画像ではなく、見えている範囲(+α)の画像のみを縮小処理する。
縮小処理の最中にも、ウィンドウを操作できるようにしている。
といった非同期的な処理にて、パフォーマンスを向上させているのでしょう。
魔界の仮面弁士様 いつもご親切にありがとうございます。(VB6でした。失礼しました)
事前に画像のサムネールを作る方法についてなにか上手い手はないかと探しましたがなかなか見つからず、やむなくImage1()のコントロール配列にStretch
してLoadしたものです。
アドバイスいただいたGdipGetImageThumbnailというものをググってみましたがドイツ語で1件(売り物?)があるのみでした。
そこで再度質問させてください。
1.thumbs.dbというファイルは画像フォルダーに自動生成されているようですがこれを読み取る方法などあるのでしょうか?
2.画像FORMATはjpegなのですが、これを全部読み込まないで間引きしたりしてロード時間を減らすような方法はあるのでしょうか?
欲張っての質問でありますがよろしくお願いします。
> GdipGetImageThumbnail
GDI+ の Flat API です。(Platform SDK 等に掲載されています)
.NET では、Image.GetThumbnailImage メソッドがそれに相当します。
http://www.atmarkit.co.jp/fdotnet/dotnettips/559thumbnail/thumbnail.html
VB6 向けのサンプルを書くほどの余裕が無いので…せめて SDK に
記載されている API 定義だけでも記しておきます。
GpStatus WINGDIPAPI GdipGetImageThumbnail(
GpImage *image,
UINT thumbWidth,
UINT thumbHeight,
GpImage **thumbImage,
GetThumbnailImageAbort callback,
VOID * callbackData)
> 再度質問させてください。
どちらもわかりません。他の回答者のフォロー待ちということで。(^^;
> 1.thumbs.dbというファイルは画像フォルダーに自動生成されているようですがこれを読み取る方法などあるのでしょうか?
こちらだけ
このサイトが参考になりますが:
http://www.vsj.co.uk/articles/display.asp?id=628
VCをアンインストールしたのでIStorageインタフェイスが見つからないので諦めました
IShellImageStoreインターフェースなどについて調べてください。
昔作った実験のを発掘したので、とりあえずUploadしておきます。
http://www.koalanet.ne.jp/~akiya/vbtaste/vbp/ShThbX00.lzh
# 説明などは一切ないので、自分でコードを追って調べるなりしてください。
魔界の仮面弁士様、ガッ様、K.J.K様、沢山のアドバイスを大変ありがとうございます。 どれも見たことのなかったキーワードばかりですので一つづつ実験を重ねながら実用まで持って行きたいと思います。K.J.Kさまからいただきましたコードは具体的に実験できるものですので勉強しながら進めたいと思います。どれもすぐに自信をもって使えるまでには当方のレベルアップが必要かと思いますが数種類のキーワードを頼りに勉強させていただきます。ありがとうございました。(解決のチェックは現段階では保留とさせていただきます)
ツイート | ![]() |