Windows 8各种流之间的转换

复制代码
//String 转 Buffer
private IBuffer GetBufferFromString(String str)
{
using (InMemoryRandomAccessStream memoryStream = new InMemoryRandomAccessStream())
{
using (DataWriter dataWriter = new DataWriter(memoryStream))
{
dataWriter.WriteString(str);
return dataWriter.DetachBuffer();
}
}
}

//Buffer 转 String
private String GetStringFromBuffer(IBuffer buffer)
{
using (DataReader dataReader = DataReader.FromBuffer(buffer))
{
return dataReader.ReadString(buffer.Length);
}
}

//Stream 转 IInputStream 

IInputStream inputStream = stream.AsInputStream();

//IInputStream 转 Stream

stream  = inputStream.AsStreamForRead();

//Stream 转 IOutputStream 

IOutputStream outputStream = stream.AsOutputStream();

//IOutputStream 转 Stream

stream  = outputStream.AsStreamForRead();

//Stream  转  IRandomAccessStream

IBuffer buffer = null;

var inputstream = stream.AsInputStream();

using (var dataReader = new DataReader(inputstream))

{

await dataReader.LoadAsync((uint)stream.Length);

buffer = dataReader.DetachBuffer();

}

var iRandomAccessStream = new InMemoryRandomAccessStream();

await iRandomAccessStream.WriteAsync(buffer);

// IRandomAccessStream 转 Stream

stream = iRandomAccessStream.AsStream();  

//Ibuffer转byte[]

byte[] bytes = WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length);

//Byte[]转Ibuffer

IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(bytes,0,bytes.Length);

//Ibuffer转Stream

Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer);

//Stream转Ibuffer

MemoryStream memoryStream = new MemoryStream();  

if (stream != null)

{

byte[] bytes = ReadFully(stream);

if (bytes != null)

{

var binaryWriter = new BinaryWriter(memoryStream);

binaryWriter.Write(bytes);

}

} 

IBuffer buffer=WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream,0,(int)memoryStream.Length);

//Ibuffer转byte[]

byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length);

//Byte[]转Ibuffer

WindowsRuntimeBufferExtensions.AsBuffer(bytes,0,bytes.Length);

//Ibuffer转IrandomAccessStream

InMemoryRandomAccessStream inStream = new InMemoryRandomAccessStream();

DataWriter datawriter = new DataWriter(inStream.GetOutputStreamAt(0));

datawriter.WriteBuffer(buffer,0,buffer.Length);

await datawriter.StoreAsync();

//IrandomAccessStream转Ibuffer

Stream stream=WindowsRuntimeStreamExtensions.AsStreamForRead(randomStream.GetInputStreamAt(0));

MemoryStream memoryStream = new MemoryStream();  

if (stream != null)

{

byte[] bytes = await ConvertStreamTobyte(stream);

if (bytes != null)

{

var binaryWriter = new BinaryWriter(memoryStream);

binaryWriter.Write(bytes);

}

} 

IBuffer buffer=WindowsRuntimeBufferExtensions.GetWindowsRuntimeBuffer(memoryStream,0,(int)memoryStream.Length);

//Stream转byte[]

public async Task<byte[]> ConvertStreamTobyte(Stream stream)

{

MemoryStream ms = new MemoryStream();

await stream.CopyToAsync(ms);

return ms.ToArray();

}

//Byte转Stream

public Stream BytesToStream(byte[] bytes)

{

Stream stream = new MemoryStream(bytes);

return stream;

}

//Byte[] -> BitmapImage

public async Task<BitmapImage> ByteArrayToImageAsync(byte[] pixeByte)

{

using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())

{

stream.Seek(0);

IBuffer buffer = WindowsRuntimeBufferExtensions.AsBuffer(pixeByte, 0, pixeByte.Length);

await stream.WriteAsync(buffer);

BitmapImage image = new BitmapImage();

image.SetSource(stream);

return image;

}

}
复制代码

 

posted @   wzwyc  阅读(428)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示