Metro APP - 位图图像到字节[]或从Web下载图像并将其转换为Byte[]数组

本文关键字:图像 数组 Byte 转换 或从 APP 位图 到字节 Web Metro 下载 | 更新日期: 2023-09-27 18:33:23

有没有办法将BitmapImage(Windows.UI.Xaml.Media.BitmapImage)转换为byte[]数组?我尝试过什么都没有工作...另一种可能的情况(如果BitmapImage无法转换为字节数组)是从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。所以拉斯不能正常工作。这是怎么回事?

谢谢

Metro APP - 位图图像到字节[]或从Web下载图像并将其转换为Byte[]数组

在您的代码中,您永远不会等待 BitmapImage 从 Web 加载图像,因此当您访问它们时,它不知道其 PixelWidth/PixelHeight。您可以等待它加载 - 例如,通过调用"await bi.WaitForLoadedAsync()".如果您想访问解码的像素,这不会真正帮助您,因为BitmapImage不允许您访问像素,并且目前没有API将BitmapImage转换为可写位图。

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