c# UWP - Convert byte array to InMemoryRandomAccessStream/IRandomAccessStream
20,382
Solution 1
Add the using
statement at the top of the document.
using System.Runtime.InteropServices.WindowsRuntime;
internal static async Task<InMemoryRandomAccessStream> ConvertTo(byte[] arr)
{
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
await randomAccessStream.WriteAsync(arr.AsBuffer());
randomAccessStream.Seek(0); // Just to be sure.
// I don't think you need to flush here, but if it doesn't work, give it a try.
return randomAccessStream;
}
Solution 2
On Windows 8.1 it's even easier as we added the AsRandomAccessStream extension method:
internal static IRandomAccessStream ConvertTo(byte[] arr)
{
MemoryStream stream = new MemoryStream(arr);
return stream.AsRandomAccessStream();
}
Solution 3
In one line:
internal static IRandomAccessStream ConvertTo(byte[] arr)
{
return arr.AsBuffer().AsStream().AsRandomAccessStream();
}
Related videos on Youtube
Author by
Alen Lee
Updated on March 17, 2022Comments
-
Alen Lee about 2 years
I have a problem converting byte array to
InMemoryRandomAccessStream
orIRandomAccessStream
in windows 8?This is my code, but It doesn't work :
internal static async Task<InMemoryRandomAccessStream> ConvertTo(byte[] arr) { InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream(); Stream stream = randomAccessStream.AsStream(); await stream.WriteAsync(arr, 0, arr.Length); await stream.FlushAsync(); return randomAccessStream; }
And I created the
RandomAccessStreamReference
and set the requst datapack in order to share the image to other appprivate static async void OnDeferredImageStreamRequestedHandler(DataProviderRequest Request) { DataProviderDeferral deferral = Request.GetDeferral(); InMemoryRandomAccessStream stream = await ConvertTo(arr); RandomAccessStreamReference referenceStream = RandomAccessStreamReference.CreateFromStream(stream); Request.SetData(referenceStream); }
There's no exception but I can't use the result image byte array
I think there's an error when converting
byte[]
toInMemoryRandomAccessStream
, but it doesn't throw an exception.Anybody know how to implement it?
if anyone knows how to convert the byte array to
IRandomAccessStream
, it's also appreciated-
Security Hound about 11 yearsWhat exactly is wrong with the code you have?
-
Farhan Ghumra about 11 yearsPlease check this & tell me if you can solve the issue.
-
-
tibel over 8 yearsThis seems not to work for some scenarios, as described in stackoverflow.com/questions/22332217/…
-
Konstantin S. over 2 yearsIt looks like an action that copies the data three times. You need to check that this is not happening in order for the answer to be usable.