在Windows Phone 8.1 Runtime中将BitmapImage转换为byte 数组

有一些示例可以执行此操作,但它们适用于Windows Phone 8.0或8.1 Silverlight。

但是如何为Windows Phone 8.1 Runtime执行此操作?

您无法从Windows.UI.Xaml.Media.Imaging中提取像素。 BitmapImage 。

最通用的解决方案是使用WriteableBitmap而不是BitmapImage。 这些类都是BitmapSources ,几乎可以互换使用。 WriteableBitmap通过其PixelBuffer属性提供对其像素数据的访问:

byte[] pixelArray = myWriteableBitmap.PixelBuffer.ToArray(); // convert to Array Stream pixelStream = wb.PixelBuffer.AsStream(); // convert to stream 

否则,您需要从BitmapImage从中获取像素。 根据BitmapImage的初始化方式,您可以从其UriSource属性中找到它的来源。 WinRT Xaml Toolkit有一个扩展方法FromBitmapImage,用于根据UriSource从BitmapImage创建WriteableBitmap。

一个丑陋的选择是将BitmapImage渲染为Image,基于Image创建RenderTargetBitmap ,然后使用RenderTargetBitmap获取其Pixels。 CopyPixelsAsync ()

试过这个?

 private byte[] ConvertToBytes(BitmapImage bitmapImage) { byte[] data = null; using (MemoryStream stream = new MemoryStream()) { WriteableBitmap wBitmap = new WriteableBitmap(bitmapImage); wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100); stream.Seek(0, SeekOrigin.Begin); data = stream.GetBuffer(); } return data; }