【问题标题】:Storing an image from a url into a bitmap with memory stream将图像从 url 存储到带有内存流的位图中
【发布时间】:2017-05-19 02:09:54
【问题描述】:

我试图将图像从 URL 存储到位图中,我有以下代码:

public static List<Bitmap> Images = new List<Bitmap>();

using (systemcore.client)
{
    using (var response = await systemcore.client.GetAsync("http://i.imgur.com/BsPzIfs.png"))
    {
        using (MemoryStream memoryStream = new MemoryStream())
        {
            Bitmap bitmap = new Bitmap(memoryStream);
            Images.Add(bitmap);
        }
    }

systemcore.client 只是一个httpclient

当我尝试运行它时,我收到一条错误消息:

参数无效

如何将图像从内存流中存储到位图中?

【问题讨论】:

  • 我在这里可能有点困惑,但看起来好像你没有对来自response 的数据做任何事情你只需实例化一个MemoryStream 然后是一个Bitmap 并添加一个空白内存流到所述位图。您可能希望将响应中的数据提供给MemoryStream

标签: c#


【解决方案1】:

我不知道systemcore.client 是什么,所以无法真正帮助您。但是,这就是您使用普通HttpClient 的方式:

async Task<List<Bitmap>> getImages()
{
    var images = new List<Bitmap>();
    using (var client = new HttpClient())
    {
        var response = await client.GetAsync("http://i.imgur.com/BsPzIfs.png");
        var bitmap = new Bitmap();
        if (response != null && response.StatusCode == HttpStatusCode.OK)
        {
            using (var stream = await response.Content.ReadAsStreamAsync())
            {
                var memStream = new MemoryStream();
                await stream.CopyToAsync(memStream);
                memStream.Position = 0;
                images.Add(new Bitmap(memStream);
            }
        }
    }
    return images;
}   

【讨论】:

    【解决方案2】:

    我做了一些非常相似的事情,这是代码(这对我有用): 首先,我有一个函数可以获取图像的字节序列(当然你必须使用单个图像的 url)。 然后我调用函数来获取字节列表。 我使用它的构造函数创建了一个 MemoryStream 对象,以将字节加载到其中。然后使用 MemoryStream 获取位图。

    byte[] GetImage(string url)
        {
            var request = (HttpWebRequest)WebRequest.Create(url);
            var response = (HttpWebResponse)request.GetResponse();
    
            using (Stream dataStream = response.GetResponseStream())
            {
                if (dataStream == null)
                    return null;
                using (var sr = new BinaryReader(dataStream))
                {
                    byte[] bytes = sr.ReadBytes(100000000);
    
                    return bytes;
                }
            }
        }
    

    电话:

    byte[] image = GetImage(selectedUrl);
    using (var ms = new MemoryStream(image))
    {
    
        Image img = new Image.FromStream(ms);
        Bitmap bmp = new Bitmap(img);
    }
    

    我使用了 Image 对象,因为我不确定 Bitmap 构造函数是否可以读取 MemoryStream 对象(可以读取 Stream 对象,顺便说一句)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 2014-06-20
      • 2015-08-27
      • 2016-08-06
      • 2019-03-10
      • 2018-10-30
      • 1970-01-01
      相关资源
      最近更新 更多