我需要将 url 解码为位图。我正在使用以下代码尝试解码流。
async Task <Android.Graphics.Bitmap> GetImageFromUrl(string url) {
using(var client = new HttpClient()) {
var response = await client.GetAsync(url);
if (response != null && response.StatusCode == HttpStatusCode.OK) {
using(var stream = await response.Content.ReadAsStreamAsync()) {
return await BitmapFactory.DecodeStreamAsync(stream);
}
}
return null;
}
}
提供的 url 是一张空白的黑色图像:https://assets.radiowave.io/prod/StationAssets/1/image-md.jpg
为什么 BitmapFactory.DecodeStreamAsync 总是返回 null?
最佳答案
您正在尝试将 GZIP 流传递给 DecodeStream
,因此它无法确定您传递的类型图像。将 HttpClientHandler
添加到您的 HttpClient
启用自动解压。
仅供引用:如果此方法被多次调用,您应该将 HttpClient
视为单例并且只创建一次。
async Task<Android.Graphics.Bitmap> GetBitmapFromUrlAsync(string url)
{
var handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip
};
using (var client = new HttpClient(handler))
{
var response = await client.GetAsync(url);
if (response != null && response.StatusCode == HttpStatusCode.OK)
{
using (var stream = await response.Content.ReadAsStreamAsync())
{
return await BitmapFactory.DecodeStreamAsync(stream);
}
}
return null;
}
}
关于c# - 在 GZIP 文件上使用 BitmapFactory.DecodeStreamAsync 将 URL 流式传输到 Android.Graphics.Bitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57667046/