gpt4 book ai didi

c# - 如何从 SoftwareBitmap 获取字节数组

转载 作者:太空狗 更新时间:2023-10-29 20:52:44 26 4
gpt4 key购买 nike

您好,我需要有关如何从 C# UWP 中的 SoftwareBitmap 获取字节数组的帮助,以便我可以通过 TCP 套接字发送它。

我还可以访问“VideoFrame previewFrame”对象,这是我从中获取 SoftwareBitmap 的地方。

我在网上看到类似下面的操作,但是 UWP 不支持 wb.SaveJpeg(...)。除非我遗漏了什么?

MemoryStream ms = new MemoryStream();
WriteableBitmap wb = new WriteableBitmap(myimage);
wb.SaveJpeg(ms, myimage.PixelWidth, myimage.PixelHeight, 0, 100);
byte [] imageBytes = ms.ToArray();

任何帮助或正确方向的指示,我们将不胜感激。

谢谢,安迪

最佳答案

当然,您可以从 SoftwareBitmap 访问编码 byte[] 数组。

查看此示例,提取 jpeg 编码的 byte[]:

// includes BitmapEncoder, which defines some static encoder IDs
using Windows.Graphics.Imaging;


private async void PlayWithData(SoftwareBitmap softwareBitmap)
{
// get encoded jpeg bytes
var data = await EncodedBytes(softwareBitmap, BitmapEncoder.JpegEncoderId);

// todo: save the bytes to a DB, etc
}

private async Task<byte[]> EncodedBytes(SoftwareBitmap soft, Guid encoderId)
{
byte[] array = null;

// First: Use an encoder to copy from SoftwareBitmap to an in-mem stream (FlushAsync)
// Next: Use ReadAsync on the in-mem stream to get byte[] array

using (var ms = new InMemoryRandomAccessStream())
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, ms);
encoder.SetSoftwareBitmap(soft);

try
{
await encoder.FlushAsync();
}
catch ( Exception ex ){ return new byte[0]; }

array = new byte[ms.Size];
await ms.ReadAsync(array.AsBuffer(), (uint)ms.Size, InputStreamOptions.None);
}
return array;
}

关于c# - 如何从 SoftwareBitmap 获取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34291291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com