c# - 从 url 下载和读取图像

标签 c# .net windows-runtime microsoft-metro

所以我基本上想做的是从 url(png、jpg 等...)读取任何类型的图像,并能够获取其纯像素数据。到目前为止,我有这段代码。

  public static async Task<BitmapImage> DownloadImageFromWebsiteAsync(string url)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            using (WebResponse response = await request.GetResponseAsync())
            {
                Stream imageStream = response.GetResponseStream();

                using (var result = new MemoryStream())
                {
                    await imageStream.CopyToAsync(result);
                    byte[] array = result.ToArray();
                    return await ByteArrayToBitmapImage(array);
                }

            }
        }
        catch (WebException ex)
        {
            Debug.WriteLine(ex.Message);
            return null;
        }
    }

    private static async Task<BitmapImage> ByteArrayToBitmapImage(byte[] byteArray)
    {
        var bitmapImage = new BitmapImage();

        var stream = new InMemoryRandomAccessStream();
        await stream.WriteAsync(byteArray.AsBuffer());
        stream.Seek(0);

        bitmapImage.SetSource(stream);

        return bitmapImage;
    } 

由于 jpeg 等编码,将纯 byte[] 作为像素获取是行不通的。我想知道他们是否有任何方法可以从 url 下载图像、对其进行解码并检索像素缓冲区。非常感谢您的帮助。谢谢。

最佳答案

试试这个。您需要手动添加 using System.Runtime.InteropServices.WindowsRuntime;

private async Task<byte[]> GetBytesFromImage(string URL)
{
    byte[] srcPixels;
    var uri = new Uri(URL);
    var streamRef = RandomAccessStreamReference.CreateFromUri(uri);

    using (IRandomAccessStreamWithContentType fileStream = await streamRef.OpenReadAsync())
    {
        BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);
        PixelDataProvider pixelProvider = await decoder.GetPixelDataAsync();
        srcPixels = pixelProvider.DetachPixelData();
    }

    return srcPixels;
}

关于c# - 从 url 下载和读取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18540603/

相关文章:

c# - 找不到 MySql 库

c# - 连接两个数据表期间无效的匿名类型成员声明符

c# - 有什么方法可以在不重写的情况下使这个 c# 类线程安全?

c# - Visual Studio 调试很慢

c# - 我可以使用表达式设置结构的属性吗?

c# - IIS WCF 服务托管与 Windows 服务

windows - 如何跟踪 WinRT 应用程序(在 Win32 中很简单)?

ListView 滑动/滑动动画

c# - WinRT ListView 隐藏滚动条?

c# - .net 版本 VS2005 用于 C# 项目