この問題は正解です。私たちは今日この仕事に遭遇しました。私はここで何が起こっているのかを決定的に証明することができました。
JPEG規格では、データの一連の「チャンク」(「セグメント」と呼ばれる)からなるファイルであるメタデータ形式が定義されています。各チャンクはFFマーカで始まり、別のマーカ・バイトが続き、チャンクの種類を識別し、その後にチャンクの長さを表すバイトのペア(16ビットのリトル・エンディアン値)が続きます。一部のチャンク(FFD8、 "Start of Image"など)はファイルの使用に不可欠であり、一部のもの(FFFE、 "Comment"など)はまったく無意味です。
JPEG規格が定義されているときには、「アプリケーション固有のデータ」に使用されることになっていた、いわゆる「APPマーカー」---タイプFFE0〜FFEF ---も含まれていました。これらは様々なプログラムによってさまざまな方法で悪用されますが、ほとんどの場合、JFIFデータに使用されるAPP0(FFE0)を除いて、無意味で無視できます.JFIFはJPEG標準を画像のDPIのような有用な情報を追加します。
imageの問題は、そのマーカーの後にサイズゼロのチャンクがあるFFE1マーカーが含まれていることです。そうでなければ、それほど目立たない小さな無駄なAPP1チャンクを除いて、目に見えない画像データ(顕著な画像ですが、目に見えないデータ)です。 GDI +は誤ってそのAPP1チャンクを解釈しようとしていますが、おそらくそれをEXIFデータとして解読しようとしていて、それが爆発しています。 (私の推測では、GDI +は実際にはサイズゼロの配列を処理しようとしているために死んでいるということです)。正しく書かれていれば、理解できないAPPNチャンクは無視されますが、定義されたデータは非標準であり、炎に爆発する。
解決策は、ファイルをメモリに読み込んで不要なAPPnチャンク(マーカーFFE1〜FFEF)を取り除き、その結果得られた「クリーン」画像データをGDI +に送ります。正しく処理してください。
我々は現在投じについては
:-)楽しい賞品と、JPEG-クリーニングルーチン最速書くことができます誰が見てここに仕事で進行中のコンテストがあります。そのイメージがではありませんが「わずかに非標準」イメージはAPP1を独自の目的で使用しています.GDI +はそのデータを処理しようとすると非常に間違っています。他のアプリケーションでは、想定されているようにAPPチャンクを正しく無視するため、画像を読むのに問題はありません。
私はこのエラーが大好きです。「ちょっと、ちょっとジャンクが起きました。マイクロソフトは、「すみませんが、GDI +が一般的なエラーを経験した以上のことは何も教えてくれません」のように意味のある何かをあなたに伝えないことについて、少なくとも謝罪するだろうと考えています。 –