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

标签 c# image stream windows-runtime winrt-xaml

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

但是我不知道我该怎么做... 如果有人有想法,那就太好了。

当前尝试:

        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 从网络加载图像,因此当您访问它们时它不知道其 PixelWidth/PixelHeight。您可以等待它加载 - 例如使用 AsyncUI通过调用“await bi.WaitForLoadedAsync()”来图书馆。如果您想访问解码后的像素,这对您没有真正的帮助,因为 BitmapImage 不允许您访问像素,并且目前没有 API 可以将 BitmapImage 转换为 WriteableBitmap。

您可以查看 earlier question关于这个话题。您需要使用类似 HttpClient.GetAsync() 的内容从网络获取图像文件。 ,然后使用类似 BitmapDecoder 的方式加载它.

关于c# - Metro APP - BitmapImage 到 Byte[] 或从 Web 下载图像并将其转换为 Byte[] 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10472282/

相关文章:

c# - SharePoint 2013 App——增删改查操作

c# - 为什么 C# 不等式运算符不是 !==?

java - java中使用ECC加密图像

c++ - 自定义复制赋值运算符使程序崩溃(C++)

c# - NSFileManager.SetSkipBackupAttribute() 是否也适用于(递归)路径?

c# - 在 Xamarin Studio 中删除未使用的 using 语句和排序 using 语句的最佳方法?

image - 是否可以将矩阵中的值映射到 MATLAB 中的颜色

ios - 使用 AVPlayer 处理流媒体事件

node.js - Stream.Transform 在完成输出之前接受新输入

dart - 如何使用 rxdart 获取 Stream<String> 中的最后一个值?