無効な画像形式の Image.FromFile によってスローされる OutOfMemoryException: 説明
Image.FromFile を使用して画像をロードしようとすると、開発者は次のような問題を引き起こす可能性があります。有効な画像形式のファイルであっても OutOfMemoryException が発生します。これは直観に反するように思えるかもしれません。なぜこの例外が無効な画像形式に対して意図的にスローされるのかという疑問が生じます。
その答えは、.NET の出現前に開発された GDI ライブラリの歴史にあります。 GDI の C 実装は、問題を報告するために例外ではなくエラー コードに依存していました。互換性を維持するために、GDI の .NET ラッパーはこの動作を維持しました。
C の制限により、考えられるエラー コードの数は制限されていました。その結果、GDI が定義したエラー コードは 20 個のみで、潜在的な画像フォーマットの問題をすべてカバーするには不十分な数でした。この制限により、本物のメモリの問題と画像ファイル形式の問題の両方を表す OutOfMemory エラー コードのオーバーロードが発生しました。
無効な画像形式が発生すると、GDI は問題が使用可能なメモリの不足に起因するかどうかを判断できません。または画像ファイル内のデータが破損しています。その結果、エラーが OutOfMemory として報告されます。
より正確なエラー処理を提供するには、Image.FromFile 呼び出しを try-catch ブロックでラップし、FormatException などのよりコンテキスト固有の例外をスローします。提供されたコードに示すように:
public static Image OpenImage(string filename) { try { return Image.FromFile(filename); } catch (OutOfMemoryException ex) { throw new FormatException("The file does not have a valid image format.", ex); } }
OutOfMemoryException を処理し、より説明的な例外を提供することで、ユーザー エクスペリエンスとエラーの原因の特定と解決が容易になります。
以上が無効な画像形式に対して「Image.FromFile」が「OutOfMemoryException」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。