Krzysztof Kaczor
Krzysztof Kaczor

Reputation: 5588

How to download an image from an URI and create a bitmap object from it?

I'm trying to download image from a website and create bitmap based on that image. It looks like this:

    public void test()
    {
            PostWebClient client = new PostWebClient(callback);
            cookieContainer = new CookieContainer();
            client.cookies = cookieContainer;
            client.download(new Uri("SITE"));
    }

    public void callback(bool error, string res)
    {
            byte[] byteArray = UnicodeEncoding.UTF8.GetBytes(res);

            MemoryStream stream = new MemoryStream( byteArray );
            var tmp = new BitmapImage();
            tmp.SetSource(stream);
    }

I receive "Unspecified error" on last line of callback method. Interesting fact is that if I use BitmapImage(new Uri("SITE")) it works well... (I can't do this like that because I want to grab cookies from that URL. The image is an jpg. PostWebClient class -> http://paste.org/53413

Upvotes: 16

Views: 40048

Answers (4)

Krisztián Balla
Krisztián Balla

Reputation: 20361

The easiest way is to open a network stream via a WebClient instance and pass it to the constructor of the Bitmap class:

using (WebClient wc = new WebClient())
{
    using (Stream s = wc.OpenRead("http://hell.com/leaders/cthulhu.jpg"))
    {
        using (Bitmap bmp = new Bitmap(s))
        {
            bmp.Save("C:\\temp\\octopus.jpg");
        }
    }
}

Upvotes: 12

vitalinvent
vitalinvent

Reputation: 493

try this:

            string url ="http://www.google.ru/images/srpr/logo11w.png"
            PictureBox picbox = new PictureBox();
            picbox.Load(url);
            Bitmap bitmapRemote = (Bitmap) picbox.Image;

url - internet image , we create new instance object PictureBox, then calling NOT ASYNC procedure to load image from url, when image retrieved get image as bitmap. Also you can use Threading to work with form, call load in other thread and pass deleate method to retrieve image when complete .

Upvotes: 0

Khurram
Khurram

Reputation: 883

This is the simplest code from Bitmap class documentation.

  System.Net.WebRequest request = 
        System.Net.WebRequest.Create(
        "http://www.microsoft.com//h/en-us/r/ms_masthead_ltr.gif");
    System.Net.WebResponse response = request.GetResponse();
    System.IO.Stream responseStream = 
        response.GetResponseStream();
    Bitmap bitmap2 = new Bitmap(responseStream);

MSDN link for Bitmap

Upvotes: 39

Mohammad Arshad Alam
Mohammad Arshad Alam

Reputation: 9862

You can try below code:

        private Bitmap LoadPicture(string url)
        {
            HttpWebRequest wreq;
            HttpWebResponse wresp;
            Stream mystream;
            Bitmap bmp;

            bmp = null;
            mystream = null;
            wresp = null;
            try
            {
                wreq = (HttpWebRequest)WebRequest.Create(url);
                wreq.AllowWriteStreamBuffering = true;

                wresp = (HttpWebResponse)wreq.GetResponse();

                if ((mystream = wresp.GetResponseStream()) != null)
                    bmp = new Bitmap(mystream);
            }
            finally
            {
                if (mystream != null)
                    mystream.Close();

                if (wresp != null)
                    wresp.Close();
            }
            return (bmp);
        }

Upvotes: 3

Related Questions