所以我基本上想做的是从 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/