C# 从url下载和读取图像

C# 从url下载和读取图像,c#,.net,windows-runtime,microsoft-metro,C#,.net,Windows Runtime,Microsoft Metro,所以我基本上要做的是从url(png、jpg等)读取任何类型的图像,并能够获得其纯像素数据。到目前为止,我有这个代码 public static async Task<BitmapImage> DownloadImageFromWebsiteAsync(string url) { try { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(

所以我基本上要做的是从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;
    } 
公共静态异步任务下载ImagefromWebSiteAsync(字符串url)
{
尝试
{
HttpWebRequest请求=(HttpWebRequest)HttpWebRequest.Create(url);
使用(WebResponse=await request.GetResponseAsync())
{
Stream imageStream=response.GetResponseStream();
使用(var result=new MemoryStream())
{
等待imageStream.CopyToAsync(结果);
字节[]数组=result.ToArray();
返回wait ByteArrayToBitmapImage(数组);
}
}
}
捕获(WebException ex)
{
Debug.WriteLine(例如消息);
返回null;
}
}
专用静态异步任务ByteArrayToBitmapImage(字节[]byteArray)
{
var bitmapImage=新的bitmapImage();
var stream=新的InMemoryRandomAccessStream();
wait stream.WriteAsync(byteArray.AsBuffer());
stream.Seek(0);
bitmapImage.SetSource(流);
返回位图图像;
} 

由于jpeg等编码,将纯字节[]作为像素不起作用。我想知道他们是否有办法从url下载图像,解码并检索像素缓冲区。非常感谢你的帮助。多谢各位

试试这个。您需要使用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;
}
专用异步任务GetBytesFromImage(字符串URL)
{
字节[]src像素;
var uri=新的uri(URL);
var streamRef=RandomAccessStreamReference.CreateFromUri(uri);
使用(irandomaccesstreamwithcontenttype fileStream=await streamRef.OpenReadAsync())
{
BitmapDecoder decoder=等待BitmapDecoder.CreateAsync(文件流);
PixelDataProvider pixelProvider=等待解码器。GetPixelDataAsync();
srcPixels=pixelProvider.DetachPixelData();
}
返回像素;
}

谢谢!这很有帮助。回答得好!