Bild von Website auslesen und in Picturebox einbinden
-
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");