C# 从url下载和读取图像
所以我基本上要做的是从url(png、jpg等)读取任何类型的图像,并能够获得其纯像素数据。到目前为止,我有这个代码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(
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();
}
返回像素;
}
谢谢!这很有帮助。回答得好!