c# - 在 GZIP 文件上使用 BitmapFactory.DecodeStreamAsync 将 URL 流式传输到 Android.Graphics.Bitmap

标签 c# android xamarin

我需要将 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/

相关文章:

android - 如何在收到消息时启动 Activity ,即使应用已死(滑动)?

android - 在 EditText 中希望光标位置位于字符串末尾

c# - 我怎样才能用 C# 延迟?

c# - 从包括格式的字符串解析 TimeSpan

android - A/OpenGL渲染器: Error: Ambient Index Buffer overflow

android - Android NDK 中的 FFMPEG - 无法加载库 "libavfilter.so"

c# - 为什么 IEnumerable.ToObservable 这么慢?

c# - 使用 C# 将图像上传到 Web API

android - Xamarin - Visual Studio 卡在 zipalign.exe

android - Xamarin 形成 RelativeLayout 使用