2017-05-16 4 views
1

so, ich versuche IRandomAccessStreamWithContentType aber kann nicht bekommen, weil ich Ausnahme erhalten:C# UWP Konvertieren von System.IO.Stream Windows.Storage.Streams.IRandomAccessStreamWithContentType

"This IRandomAccessStream does not support the CloneStream method because it requires cloning and this stream does not support cloning." 

Und dies geschieht auf letzte Zeile der folgender Code:

PixelDataProvider pix = await decoder.GetPixelDataAsync(
       BitmapPixelFormat.Bgra8, 
       BitmapAlphaMode.Straight, 
       transform, 
       ExifOrientationMode.IgnoreExifOrientation, 
       ColorManagementMode.ColorManageToSRgb); 
byte[] pixels = pix.DetachPixelData(); 

Stream pixStream = cropBmp.PixelBuffer.AsStream(); 
pixStream.Write(pixels, 0, (int)(width * height * 4)); 
IRandomAccessStream iStream= pixStream.AsRandomAccessStream(); //dafaq with streams 
RandomAccessStreamReference iReferenceStream= RandomAccessStreamReference.CreateFromStream(iStream); 
IRandomAccessStreamWithContentType newStream = await iReferenceStream.OpenReadAsync(); 

Gibt es eine Problemumgehung oder etwas?

Edit 1

ich auch auf diese Weise versucht haben, immer noch nicht funktioniert. (Aber jetzt bekomme ich null nicht, dass Clone gescheitert)

Antwort

0

aus dem Code, es scheint, dass Sie BitmapDecoder verwendet haben. Die BitmapDecoder bietet Lesezugriff auf Bitmap-Container-Daten sowie Daten aus dem ersten Frame.

Wir sollten in der Lage sein, einen neuen InMemoryRandomAccessStream für den Encoder zu schreiben und BitmapEncoder.CreateForTranscodingAsync zu rufen, den In-Memory-Stream und das Decoder-Objekt übergeben.

Zum Beispiel:

Windows.Storage.Streams.IRandomAccessStream random = await Windows.Storage.Streams.RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/sunset.jpg")).OpenReadAsync(); 
Windows.Graphics.Imaging.BitmapDecoder decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(random); 
Windows.Graphics.Imaging.PixelDataProvider pixelData = await decoder.GetPixelDataAsync(); 
byte[] buffer = pixelData.DetachPixelData(); 
InMemoryRandomAccessStream inMemoryRandomAccessStream = new InMemoryRandomAccessStream(); 
BitmapEncoder encoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryRandomAccessStream, decoder); 
encoder.BitmapTransform.ScaledWidth = 320; 
encoder.BitmapTransform.ScaledHeight = 240; 
await encoder.FlushAsync(); 
inMemoryRandomAccessStream.Seek(0); 
random.Seek(0); 
BitmapImage bitmapImage = new BitmapImage(); 
RandomAccessStreamReference iReferenceStream = RandomAccessStreamReference.CreateFromStream(inMemoryRandomAccessStream); 
IRandomAccessStreamWithContentType newStream = await iReferenceStream.OpenReadAsync(); 
bitmapImage.SetSource(newStream); 
MyImage.Source = bitmapImage; 
Verwandte Themen