[質問のみの場合は一番下までスキップしてください]
XNA ゲームを開発しているときに、もう 1 つの恐ろしい XNA の制限に直面しました。Texture2D-s (少なくとも私の PC では) は 2048*2048 を超えるサイズを持つことはできません。デフォルトで [System.Drawing.] ビットマップを使用し、最終的にテクスチャをより小さな Texture2D-s に分割し、それらを適切に表示するカスタム テクスチャ クラスをすぐに作成しました。
この変更を行ったとき、テクスチャをロードするメソッドも更新する必要がありました。古いバージョンで Texture2D-s をロードするとき、私は Texture2D.FromStream() を使用しましたが、これはかなりうまく機能しましたが、XNA は制限を超えるテクスチャを保存/ロードすることさえできないようです。 png ファイル 2048*2048 の Texture2D がアプリに含まれることになりました。したがって、[System.Drawing.] Image.FromFile を使用して画像をロードするように切り替え、制限がないように見えるので、ビットマップにキャストしました。(後でこのビットマップを Texture2D リストに変換します。)
問題は、この方法でテクスチャをロードすると著しく遅くなることです。これは、2048*2048 の制限を下回る画像でもビットマップとしてロードされ、Texture2D に変換されるためです。そのため、実際に画像ファイルを分析し、アプリケーションにロードする前にそのサイズ (幅;高さ) を確認する方法を探しています。テクスチャの制限を下回っている場合は、Bitmap にロードして単一要素の Texture2D リストに変換する必要なく、Texture2D に直接ロードできます。
ファイル全体をアプリケーションにロードせずに画像ファイルのサイズを取得する (クリーンでおそらく非常に迅速な) 方法はありますか? もしそうなら、それは使う価値がありますか?最も遅い命令は、ここでファイルを開く/シークすることであり(hdd-sに関してはおそらくハードウェアベース)、コンテンツをアプリケーションにストリーミングしないことだと思います。