[解決済み] Image.Save(...) はメモリストリームが閉じているため、GDI+の例外を投げる。
質問
画像として保存したいバイナリデータがあります。画像を保存しようとすると、画像を作成するために使用されたメモリストリームが保存前に閉じられていた場合、例外がスローされます。私がこれを行う理由は、私は動的に画像を作成し、そのようなものとして...私はメモリストリームを使用する必要があるからです。
これはコードです。
[TestMethod]
public void TestMethod1()
{
// Grab the binary data.
byte[] data = File.ReadAllBytes("Chick.jpg");
// Read in the data but do not close, before using the stream.
Stream originalBinaryDataStream = new MemoryStream(data);
Bitmap image = new Bitmap(originalBinaryDataStream);
image.Save(@"c:\test.jpg");
originalBinaryDataStream.Dispose();
// Now lets use a nice dispose, etc...
Bitmap2 image2;
using (Stream originalBinaryDataStream2 = new MemoryStream(data))
{
image2 = new Bitmap(originalBinaryDataStream2);
}
image2.Save(@"C:\temp\pewpew.jpg"); // This throws the GDI+ exception.
}
ストリームを閉じたまま画像を保存する方法について、どなたかご提案いただけないでしょうか?画像が保存された後、開発者がストリームを閉じることを覚えているかどうか、私は頼ることができません。実際、開発者は、画像がメモリ ストリームを使用して生成されたことを知らないでしょう (他の場所で、他のコードで発生するからです)。
私は本当に混乱しています :(
どのように解決するのですか?
MemoryStreamであるため、実際には 必要 ストリームを閉じる必要があります。そうしなくても何も悪いことは起こりませんが、使い捨てのものはとにかく捨てるのが良い習慣です。(参照 この質問 をご覧ください)。
しかし、あなたは は をディスポーザブルにすることで、ストリームを閉じることができます。基本的に、Bitmap コンストラクタにストリームを与えると、そのストリームは Bitmap コンストラクタの所有物となり、ストリームを閉じるべきではありません。というのも として、そのコンストラクタのドキュメント と言っています。
ビットマップの寿命が尽きるまで、ストリームを開いておく必要があります。 ストリームを開いておく必要があります。
ビットマップを破棄するときにストリームを閉じることを約束するドキュメントを見つけることはできませんが、かなり簡単にそれを確認することができるはずです。
関連
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み] Pythonの関数が例外を投げるかどうかをテストするにはどうすればよいですか?
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
-
[解決済み】Androidで大きなビットマップファイルを拡大縮小して出力する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] Base 64 の文字列を画像に変換して保存する