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

时间:2015-12-09 17:11:35

标签: c# windows-runtime windows-phone-8.1 bytearray bitmapimage

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

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

2 个答案:

答案 0 :(得分:6)

您无法从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 Toolkitextension method FromBitmapImage根据其UriSource从BitmapImage创建WriteableBitmap。

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

答案 1 :(得分:-1)

试过这个?

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;
}