UWP 将 WriteableBitmap 编码为 JPEG 字节数组
UWP Encode WriteableBitmap to JPEG byte array
我正在尝试将 WriteableBitmap 编码为 JPEG 字节数组。但实际上我发现了现在不存在的 SaveJpeg 方法的例子。
所以我尝试了 ToStreamAsJpeg 方法,但这种方法不起作用。随着一步一步,我没有摆脱它。
谢谢
好的,所以我用以下方法解决了我的问题:
private async Task<byte[]> EncodeJpeg(WriteableBitmap bmp)
{
SoftwareBitmap soft = SoftwareBitmap.CreateCopyFromBuffer(bmp.PixelBuffer, BitmapPixelFormat.Bgra8, bmp.PixelWidth, bmp.PixelHeight);
byte[] array = null;
using (var ms = new InMemoryRandomAccessStream())
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, ms);
encoder.SetSoftwareBitmap(soft);
try
{
await encoder.FlushAsync();
}
catch { }
array = new byte[ms.Size];
await ms.ReadAsync(array.AsBuffer(), (uint)ms.Size, InputStreamOptions.None);
}
return array;
}
此外,如果您有最佳实施方案……;-)
我正在尝试将 WriteableBitmap 编码为 JPEG 字节数组。但实际上我发现了现在不存在的 SaveJpeg 方法的例子。 所以我尝试了 ToStreamAsJpeg 方法,但这种方法不起作用。随着一步一步,我没有摆脱它。 谢谢
好的,所以我用以下方法解决了我的问题:
private async Task<byte[]> EncodeJpeg(WriteableBitmap bmp)
{
SoftwareBitmap soft = SoftwareBitmap.CreateCopyFromBuffer(bmp.PixelBuffer, BitmapPixelFormat.Bgra8, bmp.PixelWidth, bmp.PixelHeight);
byte[] array = null;
using (var ms = new InMemoryRandomAccessStream())
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, ms);
encoder.SetSoftwareBitmap(soft);
try
{
await encoder.FlushAsync();
}
catch { }
array = new byte[ms.Size];
await ms.ReadAsync(array.AsBuffer(), (uint)ms.Size, InputStreamOptions.None);
}
return array;
}
此外,如果您有最佳实施方案……;-)