Metro APP – BitmapImage to Byte 或从Web下载图像并将其转换为Byte 数组

有没有办法将BitmapImage(Windows.UI.Xaml.Media.BitmapImage)转换为Byte []数组? 我没有尝试过任何工作….另一种可能的情况(如果BitmapImage无法转换为Byte数组)是从web下载图像然后将其转换为数组…

但我不知道我怎么能这样做……如果有人有想法,那将是非常好的。

目前尝试:

HttpClient http = new HttpClient(); Stream resp = await http.GetStreamAsync("http://localhost/img/test.jpg"); var ras = new InMemoryRandomAccessStream(); await resp.CopyToAsync(ras.AsStreamForWrite()); BitmapImage bi = new BitmapImage(); bi.SetSource(ras); byte[] pixeBuffer = null; using (MemoryStream ms = new MemoryStream()) { int i = bi.PixelHeight; int i2 = bi.PixelWidth; WriteableBitmap wb = new WriteableBitmap(bi.PixelWidth, bi.PixelHeight); Stream s1 = wb.PixelBuffer.AsStream(); s1.CopyTo(ms); pixeBuffer = ms.ToArray(); } 

但它不起作用… i&i2总是设置为0.所以ras无法正常工作……发生了什么事?

谢谢

在您的代码中,您永远不会等待BitmapImage从Web加载图像,因此当您访问它们时它不知道它的PixelWidth / PixelHeight。 您可以等待它加载 – 例如通过调用“await bi.WaitForLoadedAsync () ”使用AsyncUI库。 如果您想要访问解码像素,这对您来说不会真正有用,因为BitmapImage不允许您访问像素,并且目前没有API将BitmapImage转换为WriteableBitmap。

您可以查看有关该主题的早期问题 。 您需要使用类似HttpClient.GetAsync()的方式从Web获取图像文件,然后使用类似BitmapDecoder的方法加载它。