Bild von Website auslesen und in Picturebox einbinden



  • Hallo Zusammen

    Information: Ich bin Anfänger.

    Es sieht wiefolgt aus. Ich möchte mit einem Http Web Request ein Bild von einer Website in meine Picturebox einbinden. Jedoch endet die Bildurl nicht wie üblich mit einem Bildformat wie: .../bild.jpg, sondern mit einer ID. Hab auch überprüft mit einer Bildurl von google, da hat es wunderbar funktioniert. Aber wie kann ich das lösen mit einer ID am Ende der URL? Wäre froh, wenn mir jemand weiterhelfen könnte.

    string picUrl = "http://server/user=" + id;
    HttpWebRequest httpWebRequest = (HttpWebRequest)
    HttpWebRequest.Create(picUrl);
    HttpWebResponse httpWebReponse = (HttpWebResponse)
    httpWebRequest.GetResponse();
    Stream stream = httpWebReponse.GetResponseStream();
    StreamReader streader = new StreamReader(stream);
    Image Imitsch = Image.FromStream(stream);
    album_cover.Image = Imitsch; //Hier sollte das Bild in die Picturebox geladen werden...
    

    Gruss Marc



  • #include <sstream>
    //...
    std::stringstream s;
    s << "http://server/user=" << id;
    std::string picUrl = s.str ();
    


  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++/CLI mit .NET in das Forum C# und .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • drakon schrieb:

    #include <sstream>
    //...
    std::stringstream s;
    s << "http://server/user=" << id;
    std::string picUrl = s.str ();
    

    Hallo drakon.

    Ist das nicht C++? 😕



  • der_anfänger_mbr schrieb:

    drakon schrieb:

    #include <sstream>
    //...
    std::stringstream s;
    s << "http://server/user=" << id;
    std::string picUrl = s.str ();
    

    Hallo drakon.

    Ist das nicht C++? 😕

    Du hattest das auch im C++ Forum gepostet. Ich hatte dich dann erst nach C++/CLI geschoben bis ich mir deinen Code richtig angeschaut hatte. Da hab ich dann gesehen das es eigentlich C# ist und dich dann hier her verschoben.



  • evilissimo schrieb:

    Du hattest das auch im C++ Forum gepostet. Ich hatte dich dann erst nach C++/CLI geschoben bis ich mir deinen Code richtig angeschaut hatte. Da hab ich dann gesehen das es eigentlich C# ist und dich dann hier her verschoben.

    Entschudlige mich, hatte ich wohl übersehen. Kann mir irgendwer weiterhelfen?



  • Private Function GetImage(ByVal url As String) As Image
            Dim img As Image = Nothing
    
            Try
                Dim request As HttpWebRequest = HttpWebRequest.Create(url)
                request.ReadWriteTimeout = 15 * 1000 ' Sekunden
                request.UserAgent = "IPCam-Plugin (DataStorageServer/Englefield Oakley Ltd.)"
    
                Dim response As HttpWebResponse = request.GetResponse
                Threading.Thread.Sleep(50) ' Speicher voll laufen lassen ... durchaus Mist !!
    
                img = Image.FromStream(response.GetResponseStream)
            Catch ex As Exception
                mylogger.err(ex)
                mylogger.war("erstelle pauschales Bild")
                img = New Bitmap(320, 240)
            End Try
    
            Return img
        End Function
    


  • Danke mal für die Antwort, jedoch brauche ich den Programmcode in C#. Ich versuchte mal ihn umzuschreiben... Aber das Läuft nicht! Bei img = Image.FromStream(response.GetResponseStream), bringt mir Visual Studio aus, dass ich ungültige argumente habe oder sowas... Für was soll der request.UserAgent gut sein? Dieses Programm speichert ja ein Imagefile und gibt dies zurück, aber es wird ein (string url) definiert?!

    private Image GetImage(string url)
            {
                Image img = null;
    
                string picUrl = "http://server/user=" + id;
    
                    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(picUrl);
                    request.ReadWriteTimeout = 15 * 1000;
                    // Sekunden 
                    request.UserAgent = "IPCam-Plugin (DataStorageServer/Englefield Oakley Ltd.)";
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
                    System.Threading.Thread.Sleep(50);
                    // Speicher voll laufen lassen ... durchaus Mist !! 
                    img = Image.FromStream(response.GetResponseStream);
    
                return img;
            }
    


  • Hatte hier niemand ein änlichens Problem? Wäre sehr hilfreich, wenn ich eine nützliche Antwort bekommen würde.... 🙂



  • Normal solltest du das Bild nun haben und nur noch anzeigen.



  • Auf deine unbearbeitete Antwort hätte ich noch Ergänzungen gehabt, aber danke fürs Ändern. Nun kann ich mir das ersparen.

    Hatte in der Zwischenzeit so einiges ausporbiert mit den Requests, Response, etc. Aber ich bekomm das Bild da nicht in ein Bitmap. Habe es auch mit byte arrays versucht um jedes byte in ein Bitmap zu schreiben etc.

    Was mir vorhin gleich aufgefalln ist...

    Um das Bild zu sehen, muss man eingeloggt sein. Jedoch gebe ich die Daten mit im Link (so wie im Code ist ein abgekürzter Beispielslink). Also etwas bekomme ich in meine Picbox rein, aber das ist etwas von der Login Seite...

    WebRequest req = WebRequest.Create("http://server/user=ID23408273");
                WebResponse resp = req.GetResponse();
                Stream stream = resp.GetResponseStream();
                StreamReader st = new StreamReader(stream);
    
                Bitmap bmp2 = new Bitmap(140 , 95, PixelFormat.Format24bppRgb);
    
                BitmapData bmpData = bmp2.LockBits(
                                     new Rectangle(0, 0, bmp2.Width, bmp2.Height),
                                     ImageLockMode.WriteOnly, bmp2.PixelFormat);
    
                string stremresult = st.ReadToEnd();
                char[] arr = stremresult.ToCharArray();
                Marshal.Copy(arr, 0, bmpData.Scan0, arr.Length);
    
                bmp2.UnlockBits(bmpData);
    
                return bmp2;
    

    Gruss



  • Einfach gehts auch mit dem WebClient:

    // Bild herunterladen:
    WebClient wc=new WebClient();
    wc.Proxy=null;
    byte[] bildBytes=wc.DownloadData("http://www.example.org/bild.jpg");
    
    // Heruntergeladenes Bild zu Testzwecken als Datei speichern:
    File.WriteAllBytes("c:\\users\\bla\\desktop\\test.jpg",bildBytes);
    
    MemoryStream ms=new MemoryStream(bildBytes);
    Image img = Image.FromStream(ms);
    


  • Nur mal so zum Quellcode den du freundlicherweise in VB.Net bekamst.

    Private Function GetImage(ByVal url As String) As Image 
            Dim img As Image = Nothing 
    
            Try 
                Dim request As HttpWebRequest = HttpWebRequest.Create(url) 
                request.ReadWriteTimeout = 15 * 1000 ' Sekunden 
                request.UserAgent = "IPCam-Plugin (DataStorageServer/Englefield Oakley Ltd.)" 
    
                Dim response As HttpWebResponse = request.GetResponse 
                Threading.Thread.Sleep(50) ' Speicher voll laufen lassen ... durchaus Mist !! 
    
                img = Image.FromStream(response.GetResponseStream) 
            Catch ex As Exception 
                mylogger.err(ex) 
                mylogger.war("erstelle pauschales Bild") 
                img = New Bitmap(320, 240) 
            End Try 
    
            Return img 
        End Function
    

    Würde in CSharp wie folgt aussehen:

    private Image GetImage(String picUrl) 
    {
            Image img = null;
    
            try 
            {
                HttpWebRequest request = HttpWebRequest.Create(picUrl) ;
                request.ReadWriteTimeout = 15 * 1000; // Sekunden 
                request.UserAgent = "IPCam-Plugin (DataStorageServer/Englefield Oakley Ltd.)"; 
    
                HttpWebResponse response = request.GetResponse(); 
                Threading.Thread.Sleep(50) //Speicher voll laufen lassen ... durchaus Mist !! 
    
                img = Image.FromStream(response.GetResponseStream) ;
            }
            catch(Exception ex) 
            { 
                // Falls du keinen Logger nutzt - Messagebox oder sonstige Ausgabe
                mylogger.err(ex) ;
                mylogger.war("erstelle pauschales Bild");
                img = new Bitmap(320, 240); 
            }
            return img;          
    }
    

    Sofern ich jetzt nicht ganz schief liege, rufst du die Methode auf und zwar wie folgt:

    PictureBoxXY.Image = this.GetImage("url");
    

Anmelden zum Antworten