私のアプリケーションの概要:クライアント側では、一連のスナップショットがWebカメラで取得されます。送信時に、画像をバイト配列に変換し、そのバイト配列を作成したサービスに送信する必要があります。
私の問題:単一の画像をに保存しようとしていますが、 「GDI+で一般的なエラーが発生しました」MemoryStream
というメッセージが表示されて壊れ続けます。深く掘り下げると、MemoryStreamのバッファ位置が54のときに例外がスローされることがわかります。残念ながら、これは写真です。コードのブロックは次のとおりです。1.2 mb
// Create array of MemoryStreams
var imageStreams = new MemoryStream[SelectedImages.Count];
for (int i = 0; i < this.SelectedImages.Count; i++)
{
System.Drawing.Image image = BitmapFromSource(this.SelectedImages[i]);
imageStreams[i] = new MemoryStream();
image.Save(imageStreams[i], ImageFormat.Bmp); /* Error is thrown here! */
}
// Combine MemoryStreams into a single byte array (Threw this
// in in case somebody has a better approach)
byte[] bytes = new byte[imageStreams.Sum(s => s.Length)];
for(int i = 0; i < imageStreams.Length; i++)
{
bytes.Concat(imageStreams[i].ToArray());
}
そしてこれが私のBitmapFromSourceメソッドです
// Converts a BitmapSource object to a Bitmap object
private System.Drawing.Image BitmapFromSource(BitmapSource source)
{
System.Drawing.Image bitmap;
using (MemoryStream ms = new MemoryStream())
{
BitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(source));
encoder.Save(ms);
bitmap = new System.Drawing.Bitmap(ms);
}
return bitmap;
}
Generic GDI + Errorについて読んだことの多くは、アクセス許可の問題を示していますが、ファイルシステムに保存していないことを考えると、ここでどのように適用されるかわかりません。また、このエラーは、画像を保存する前にMemoryStreamを閉じることで発生する可能性があることを確認しましたが、画像を保存する直前にMemoryStreamを作成したことを考えると、これがどのように適用されるかわかりません。任意の洞察をいただければ幸いです。