2017-07-27 5 views
0

Je suis en train de sérialisation et la désérialisation un IReadOnlyList<InkStroke> de Windows.UI.Input.Inking pour mon application UWP, et je l'ai utilisé le code suivant pour sérialiser les données:Conversion chaîne en streaming

var stream = new InMemoryRandomAccessStream(); 
await canvas.InkPresenter.StrokeContainer.SaveAsync(stream); 
await stream.FlushAsync(); 

var buffer = new byte[stream.Size]; 
await stream.AsStream().ReadAsync(buffer, 0, buffer.Length); 
return Convert.ToBase64String(buffer); 

Comment puis-je désérialiser cette chaîne créer un IInputStream (ou IRandomAccessStream à la place) qui peut être utilisé dans la méthode StrokeContainer.LoadAsync()?

Répondre

1

Vous pouvez utiliser la paix de code suivant ....

byte[] bytes = Convert.FromBase64String(stringinput); 
MemoryStream stream = new MemoryStream(bytes); 
IInputStream is=stream.AsRandomAccessStream(); //It will return an IInputStream object 
+3

Vous ne voulez pas 'Encoding.UTF8.GetBytes' ici - vous voulez' Convertir .FromBase64String', étant donné la façon dont la chaîne a été créée. –

1

Essayez this:

byte[] data = Convert.FromBase64String(encodedString); 
InMemoryRandomAccessStream inputStream = new InMemoryRandomAccessStream(); 
await inputStream.WriteAsync(data.AsBuffer()); 
inputStream.Seek(0); 
await canvas.InkPresenter.StrokeContainer.LoadAsync(inputStream); 
+0

La méthode 'AsBuffer' n'est apparemment pas disponible dans les applications UWP car elle utilise l'espace de noms' System.Runtime.InteropServices.WindowsRuntime'. –

+1

Vous pouvez ajouter la référence 'System.Runtime.WindowsRuntime' en tant que [paquet NuGet] (https://www.nuget.org/packages/System.Runtime.WindowsRuntime/). Je l'ai essayé tout à l'heure – ashchuk

+0

Oh bien sûr, merci! –