編集:
すみません、私の質問があいまいだったと思います。画像全体の読み込みに時間を浪費することなく、ファイルが画像ではないかどうかを確認する方法が必要です。そうすれば、残りの読み込みを後で行うことができます。ファイル拡張子だけをチェックしたくありません。
アプリケーションは画像を表示するだけです。「有効性を確認する」とは、ディレクトリ内の「画像以外のファイルを検出してスキップする」ことを意味しました。ピクセル データが破損している場合でも、画像として扱いたいと思います。
ページ番号を割り当てて、これらの画像をペアにします。一部の画像は、単一の左ページまたは右ページです。一部の画像は幅が広く、左右のページの「見開き」です。たとえば、pagesAt(3) と pagesAt(4) は、同じ std::pair 画像または同じ幅の広い画像の std::pair を返す可能性があります。
場合によっては、奇数の「薄い」画像があり、最初の画像がワイド画像と同様に単独で表示されることがあります。例として、単一の表紙があります。
ディレクトリ内のどのファイルが画像ではないかわからないということは、それらのページ番号を自信を持って割り当てて、表示するファイルをペアにすることができないことを意味します。また、ユーザーがページ X にジャンプすることを決定した場合、後で画像以外のファイルを見つけて削除し、それに応じてページ番号を再割り当てすると、ページ X が別の画像に見える可能性があります。
オリジナル:
念のため、Qt ライブラリの c++ と QImage を使用しています。
ディレクトリを反復処理し、画像へのパスで QImage コンストラクターを使用しています。もちろん、これは非常に遅く、アプリケーションが応答しないように感じさせます。ただし、無効な画像ファイルを早期に検出して無視することはできます。
ディレクトリを通過しているときに画像へのパスのみを保存し、実際に必要なときにのみそれらをロードすることはできますが、画像が無効かどうかはわかりません。
この2つを組み合わせて考えています。つまり、ディレクトリを反復処理しながら、画像のヘッダーのみを読み取って有効性を確認し、必要に応じて画像データをロードします。
そう、
画像ヘッダーだけを読み込むと、画像全体を読み込むよりもはるかに高速になりますか? または、ヘッダーを読み取るために少し i/o を行っているということは、画像の完全な読み込みを終了することを意味しますか? 後で、アーカイブからの画像も解凍するので、これはヘッダーだけの解凍とファイル全体の解凍にも当てはまります。
また、画像ヘッダーだけをロード/読み取る方法がわかりません。画像のヘッダーだけを読めるライブラリはありますか? そうしないと、各ファイルをストリームとして開き、すべてのファイル タイプのイメージ ヘッダー リーダーを自分でコーディングする必要があります。