私は、非常に多くの場合、大きすぎてメモリに収まらない大きな bmp ファイルを処理する必要があるアプリケーションに取り組んでいます。プロジェクトの作成時に開発しているソフトウェアの一部として、私のアプリケーションはデータを bmp ファイルから別の形式に変換し、セクションで簡単に取得できるようにします。
現在、ファイルが大きすぎてメモリに収まらないことが多いため、ソフトウェアはバイト データのセクションをファイルから直接読み取り、処理して、次のセクションに移動します。ファイルを読み取るためのコードは、以下に示すものと似ています (わかりやすくするために簡略化しています)。
FileStream fs = File.OpenRead(fileName);
fs.Seek(sectionStart, SeekOrigin.Begin);
currentSectionAsBytes = new byte[sectionSize];
fs.Read(currentSectionAsBytes, 0, currentSectionAsBytes.Length);
扱うファイルはすべて 4 で割り切れる幅を持っているため、bmp ファイルにはパディングがないため、これまでは問題なく機能していました。
最近、データの各行の最後にパディングがあるさまざまなサイズの画像を使用しており、取得したデータに誤りがありました。
私の質問は、ファイルから直接 bmp データを取得するより良い方法を知っている人はいますか? 前述のように、ファイル サイズが大きいため、ファイルからビットマップを読み取ることができません。現在、私の最善のアイデアは、 currentSectionAsBytes を取得した後、パディングサイズを計算して手動で削除することです。これはあまりにも面倒で複雑に思えます。より良い解決策があるはずです。