巨大な画像 (9000x9000 ピクセルの画像など) を Bitmap オブジェクトにロードしようとすると、メモリ不足エラー、「パラメーターが無効です」エラー、およびその他の関連する問題が発生する可能性があります。
ディスクから 9000x9000 ピクセルのイメージをロードし、最終的にディスクに保存する前にサイズを変更し、致命的なエラー (メモリ不足など) を発生させずにするにはどうすればよいですか?
2 GB の RAM、C# 4.0 を備えた 32 ビット環境を想定し、jpg、gif、bmp、tif、png の画像形式を処理します。
次の 3 つのスニペットを試しましたが、いずれもメモリ エラーで失敗します。
試行 1:
using (Bitmap srcImg = new Bitmap(@"C:\9000x9000.jpg"))
{
// boom
}
試行 2:
using (Image srcImg = Image.FromFile(@"C:\9000x9000.jpg"))
{
// kapow
}
試行 3:
using (FileStream fs = new FileStream(@"C:\9000x9000.jpg", FileMode.Open, FileAccess.Read))
{
using (Image srcImg = Image.FromStream(fs))
{
// kelly clarkson
}
}
可能な解決策についての私の考えは、画像ファイルを配列に直接ロードし(Bitmapオブジェクトの巨大なオーバーヘッドがないため)、その配列を使用してサイズを小さくすることです(おそらく、異なる画像フォーマットヘッダー用にコーディングする必要がありますか? )、最終的に管理可能なサイズの Bitmap オブジェクトに変換する前に。
考えや解決策はありますか?