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.

questionAnswers(2)

yourAnswerToTheQuestion