在UWP中将BitmapImage转换为字节数组

如何在UWP中将BitmapImage对象转换为字节数组? 在.Net中很容易实现,即使在以前的WinRT版本中,在整个互联网上看都没有成功,其中一个解决方案是使用像本答案中提到的WriteableBitmap ,但在当前版本的UWP中,构建一个WriteableBitmap出一个BitmapImage是不可能的,任何解决方法?

由于你是从图片url开始的,我唯一可以弄清楚的方法是获取图片流。 为此, RandomAccessStreamReference.CreateFromUri()方法非常有用。

 Windows.Storage.Streams.IRandomAccessStream random = await Windows.Storage.Streams.RandomAccessStreamReference.CreateFromUri(new Uri("http://...")).OpenReadAsync(); 

然后我们必须对流进行解码,以便能够读取所有像素以供以后使用。

 Windows.Graphics.Imaging.BitmapDecoder decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(random); Windows.Graphics.Imaging.PixelDataProvider pixelData = await decoder.GetPixelDataAsync(); 

最后,您可以通过这种方式访问​​像素缓冲区。

 byte[] bytes = pixelData.DetachPixelData(); 

是的,对于一个字节[]并不太复杂,我想你可以得到它。 我希望它更简单,但事实并非如此。

http://sofzh.miximages.com/c%23/ encode image var encoded = new InMemoryRandomAccessStream(); var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, encoded); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, height, width, dpiX, dpiY, image); await encoder.FlushAsync(); encoded.Seek(0); // read bytes var bytes = new byte[encoded.Size]; await encoded.AsStream().ReadAsync(bytes, 0, bytes.Length); // create base64 return Convert.ToBase64String(bytes); } private async Task FromBase64(string base64) { // read stream var bytes = Convert.FromBase64String(base64); var image = bytes.AsBuffer().AsStream().AsRandomAccessStream(); // decode image var decoder = await BitmapDecoder.CreateAsync(image); image.Seek(0); // create bitmap var output = new WriteableBitmap((int)decoder.PixelHeight, (int)decoder.PixelWidth); await output.SetSourceAsync(image); return output; }

这是重要的部分:

 var bytes = (await bitmap.GetPixelsAsync()).ToArray(); 

认为你可能喜欢看到它的背景。

祝你好运。