【问题标题】:Downloading and reading image from url从 url 下载和读取图像
【发布时间】:2013-08-30 19:58:48
【问题描述】:

所以我基本上想要做的是从 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 之类的编码,将纯字节 [] 作为像素获取是行不通的。我想知道他们是否有任何方法可以从 url 下载图像、对其进行解码并检索像素缓冲区。非常感谢您的帮助。谢谢你。

【问题讨论】:

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


    【解决方案1】:

    试试这个。您需要手动添加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;
    }
    

    【讨论】:

    • 谢谢!这很有帮助。很好的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2015-10-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多