Zapisywanie obrazu do MemoryStream - ogólny błąd GDI +
Przegląd mojej aplikacji: Po stronie klienta za pomocą kamery internetowej wykonywana jest seria migawek. Po przesłaniu chcę, aby obrazy zostały przekonwertowane na tablicę bajtów i aby ta tablica bajtów została wysłana do usługi, którą napisałem.
Mój problem: próbuję zapisać pojedynczy obraz do aMemoryStream
, ale nadal się psuje, wypluwając wiadomość,„Wystąpił ogólny błąd w GDI +”. Kiedy sięgam głębiej, widzę, że wyjątek jest generowany, gdy pozycja bufora MemoryStream wynosi 54. Niestety, jest to1.2 mb
zdjęcie. Oto blok kodu:
// 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());
}
A oto moja metoda 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;
}
Wiele z tego, co przeczytałem na temat ogólnego błędu GDI +, wskazuje na problem z uprawnieniami, ale nie widzę, jak to się tu zastosuje, biorąc pod uwagę, że nie zapisuję go w systemie plików. Widziałem również, że ten błąd może powstać z powodu zamykania strumienia MemoryStream przed zapisaniem obrazu, ale nie widzę też, jak miałoby to zastosowanie, biorąc pod uwagę, że tworzę MemoryStream bezpośrednio przed zapisaniem obrazu. Każdy wgląd zostałby bardzo doceniony.