繁体   English   中英

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

[英]Metro APP - BitmapImage to Byte[] or Download Image from Web and convert it to a Byte[] Array

有没有办法将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的方法加载它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM