Jak konwertować bitmapsource do Memorstream. Chociaż próbowałem jakiegoś kodu:

private Stream StreamFromBitmapSource(BitmapSource writeBmp)
{
    Stream bmp;
    using (bmp = new MemoryStream())
    {                    
        BitmapEncoder enc = new BmpBitmapEncoder();
        enc.Frames.Add(BitmapFrame.Create(writeBmp));
        enc.Save(bmp);                                     
    }

   return bmp;
}

Nie daje żadnego błędu, ale po wprowadzeniu punktu debugowania pokazuje pewne wyjątki wymienione poniżej.

Pojemność: "Printstream.Capycity" rzucił wyjątek typu "System.ObjectdisposedException": "Printstream.length" rzucił wyjątek typu "System.ObjectdisposedException" pozycji: "Printstream.position" rzucił wyjątek typu "System.ObjectdispedException "

5
Aarti Dhiman 16 luty 2017, 14:17

2 odpowiedzi

Najlepsza odpowiedź

using (bmp = new MemoryStream()) Przyczyny {X1}} Obiekt jest zniszczony na końcu za pomocą bloku. A ty powracasz zmienną bmp, która została zniszczona.

Usuń przy użyciu:

private Stream StreamFromBitmapSource(BitmapSource writeBmp)
{
    Stream bmp = new MemoryStream();

    BitmapEncoder enc = new BmpBitmapEncoder();
    enc.Frames.Add(BitmapFrame.Create(writeBmp));
    enc.Save(bmp);                                             

   return bmp;
}
5
BWA 16 luty 2017, 13:37

Problemem tutaj jest, że tworzysz bmp wewnątrz using, dlatego został umieszczony przed powrotem go (jest usuwany po wyjściu z użycia) i wyjaśnia wyjątki, które otrzymujesz.

private Stream StreamFromBitmapSource(BitmapSource writeBmp)
{
    Stream bmp= new MemoryStream();
    using (enc = new BmpBitmapEncoder())
    {                    
        enc.Frames.Add(BitmapFrame.Create(writeBmp));
        enc.Save(bmp);                                     
    }

   return bmp;
}
0
moondaisy 16 luty 2017, 11:23