画像を読み込んで保存するときに何年にもわたって機能するコードを持っていると、このコードを壊す画像が1つあることがわかりました。
const string i1Path = @"c:\my\i1.jpg";
const string i2Path = @"c:\my\i2.jpg";
var i = Image.FromFile(i1Path);
i.Save(i2Path, ImageFormat.Jpeg);
例外は次のとおりです。
System.Runtime.InteropServices.ExternalException が発生しました
GDI+ で一般的なエラーが発生しました。
System.Drawing.Image.Save (文字列ファイル名、ImageCodecInfo エンコーダー、EncoderParameters encodingParams)
で System.Drawing.Image.Save (文字列ファイル名、ImageFormat 形式)
で ...
私が見る限り、画像に特別なものは何もありません。サイズは約 250 ピクセルで、Windows イメージ ビューアーや Paint.NET などで開くことができます。
(上記の画像は、Stack Overflow にアップロードされた後、エラーが発生しなくなったため、元の画像をここに配置しました)
私が発見したのは、Save
メソッドを呼び出すと、宛先イメージ ファイルがゼロ バイトで作成されていることです。
エラーの原因については本当にわかりません。
私の質問:
- .NET がイメージを保存するのを妨げる特別なことが何か考えられますか?
- この種のエラーを絞り込む方法は (パニック以外に) ありますか?