編集:エラーの理由を見つけたのでこれを閉じますが、この投稿を削除する代わりに..より洗練された質問で新しい投稿を生成します。
皆さん、こんにちは。
読み込んだバイナリ データがいくつかあります。それを に変換したいので、 を入力データとして使用してSystem.Drawing.Image
のインスタンスを作成します。Image object
memory stream
それを行った後、画像をシリアル化してから逆シリアル化します(ビジネスロジック用)。デシリアライズは例外をスローします。Image
メモリ ストリーム コンストラクターの代わりにファイル名コンストラクターを使用してインスタンスを作成すると、すべて 100% 動作します。これは、Image
オブジェクトをネットワーク経由でシリアル化できることを示しています。
私は何を間違っていmemory stream
ますか、私は使用しましたか?
これは、シリアル化される前に Image オブジェクトを作成するために使用するコードです:-
// Fake way of getting some binary (image) data.
byte[] data = File.ReadAllBytes("Chick.jpg");
using (Stream originalBinaryDataStream = new MemoryStream(data))
{
// This works perfectly fine, if use this method (which i can't).
//image = new Bitmap("Chick.jpg");
// This throws an exception when it's deserialized.
// It doesn't like the memory stream reference?
image = new Bitmap(originalBinaryDataStream);
}
これは、例外をスローするイメージをデシリアライズしようとするコードです (これは、例外の別のイメージです) 。
代替テキスト http://img254.imageshack.us/img254/9748/step1zx3wk5.png
正しく破棄されていない、またはシリアル化できないものがあります..したがって、例外がスローされますか?
助けてください :)
編集: 例外は私のImage Debugger Visualizerで呼び出されます。
完全な VS2008 ソリューションをここにアップロードしました(1.28 MB のダウンロード)。
その中には、ビジュアライザー クラスとMS テスト クラスの 2 つのプロジェクトがあります。唯一の単体テストを実行すると、ワイヤーを介してデバッガーに渡された Image インスタンスの逆シリアル化に失敗するため、一般的な (読み取り: 役に立たない) GDI+ 例外がスローされます。ファイル パス コンストラクターを使用して作成された Image インスタンスを渡した場合、逆シリアル化は完全に機能します。
編集 2: 別のファイル アップロード サイトを使用しました - 乾杯!
EDIT 3:実際にエラーを再現する方法。
- プロジェクトを DEBUG モードに変更します (リリース モードではありません)。
- すべてのブレークポイントを削除します。
- ImageDebuggerVisualizer.cs を開く
- 22 行目にブレークポイントを追加します。
- ここで、UnitTest1 単体テスト メソッドをデバッグします。画像が表示されます..そのウィンドウを閉じます..すると、突然ブレークポイントになります。それをまたぐと、ブーン!!!! クラッシュ!!バン。
編集 4: 例外の 2 つのスクリーン ショットを次に示します (ソリューション ファイルをダウンロードしたくない場合)。