GDI JPEG から MemoryStream への変換エラー: よくある落とし穴
この記事では、GDI を使用して JPEG 画像を MemoryStream
に保存するときに発生する頻繁な「汎用 GDI エラー」について説明します。 PNG は問題なく動作する可能性がありますが、JPEG ではこの例外が発生することがよくあります。
問題: MemoryStream
への JPEG 保存操作中に、イライラする「汎用 GDI エラー」エラーが発生します。
根本原因: 問題は MemoryStream
のライフサイクル管理にあります。 ストリームは、Save
操作を含む画像処理全体を通して開いたままにする必要があります。
解決策: 重要なのは、MemoryStream
のオープン状態を維持することです。 修正されたコード スニペットは次のとおりです:
<code class="language-csharp">using (var m = new MemoryStream()) { dst.Save(m, format); // Save to MemoryStream // Create a new Image from the MemoryStream (optional, depending on your needs) using (var img = Image.FromStream(m)) { img.Save("C:\test.jpg"); // Save to file (optional) var bytes = PhotoEditor.ConvertImageToByteArray(img); //Convert to byte array (optional) return img; // Return the Image object } }</code>
MemoryStream
オブジェクトが不要になるまで using
ブロック内で Image
を開いたままにすることで、必要なリソースにアクセス可能な状態が維持され、エラーが防止されます。
説明: 正確な理由は不明ですが、Image
オブジェクトが元の MemoryStream
への内部参照を保持している可能性があります。ストリームを途中で閉じるとこの参照が無効になり、Save
操作中に GDI エラーが発生します。
重要な考慮事項:
MemoryStream
が開いたままになっていることを常に確認してください。Image
オブジェクトを返すメソッド (ResizingFirstOrDefault
など) の場合は、まず一時ファイルまたは別のストリームに保存してから、保存されたデータから新しい Image
オブジェクトを作成することを検討してください。このアプローチにより、GDI アプリケーション内で信頼性の高い JPEG 処理が保証されます。
以上がGDIのメモリストリームにJPEGを保存すると、ストリームが開いたままでない限り「ジェネリックエラー」が投げられますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。