TImage bin ich zu Blöd? Bild vom Internet laden.
-
Hallo,
ich bin echt kein programmieranfänger aber bekomme es nicht hin timage ein bild vom itnernet zuzuweisen. Das ist schon eine Blamage.
Ich versuche es die ganze zeit mitLoadfromFile("http:...");
Jedoch sieht er es dann als Datei auf dem Computer an heißt:
Fehler: Die datei C:/..../http://bild1.jpg konnte nicht geöffnet werden.
Bitte um hilfe.
-
Hallo
Das geht nicht so einfach, TImage kann nur Bilder aus lokalen Dateien bzw. aus TStreams im lokalen Speicher laden. Du must zuerst eine Komponente benutzen, die das Bild aus dem Internet herunterlädt, und danach kannst du TImage::LoadFrom... aufrufen.
Zum Herunterladen kannst du je nach Quelle TIdHTTP oder TIdFTP aus dem Indy-Paket benutzen. Dazu findest du hier im Forum auch einige Hinweise.bis bald
akari
-
Hi,
so jetzt habe ich eine Instanz von TFileStream erzeugt und meine TIdHttp Komponente in dieses FileStream schreiben lassen.
Jedoch möchte TImage unbedingt zu LoadFromFile einen String und keinen FileStream.mhhh *verzweiflung*
-
Hallo
Image->Picture->Bitmap->LoadFromStream
bis bald
akari
-
So habe jetzt folgenden Code geschriebeen, edoch funktioniert es irgendwie immer noch nicht. Kann mir jemand die Klasse FileStream erklären?
TImage *maschinenbild = new TImage(this); TFileStream *fs = new TFileStream( "output.jpg", 0xFFFF ); http_bilder->Get("http://www.maschinensucher.de/bilderuploads/551609.jpg", fs ); maschinenbild->Picture->Bitmap->LoadFromStream(fs);
Ich merke er macht etwas jedoch wird das Bild nicht angezeigt.
LG
Adem
-
Hallo,
Sityle schrieb:
... Kann mir jemand die Klasse FileStream erklären? ...
Ich habe selbst noch nicht mit TFileStream gearbeitet, aber in diesem Thread hier gibt es einen Link zum direkten Download der aktuellen VCL-Referenz... Da steht Einiges zu TFileStream drin...
MfG
-
Hallo
Die Stream-Klasse ist nur ein endlos-Band, mit genau einem Zeiger auf eines der Elemente das gerade aktuell ist. Je nach Typ des Streams kann man nun
- ein Element hinter das letzte Element anhängen (und nur dort)
- das Band vor- oder zurückspulen, um vorhandene Zeichen zu suchen und auslesenUnd genau das fehlt bei dir zwischen Get und LoadFrom. Du must den Stream erstmal wieder auf das erste gelesene Zeichen zurücksetzen.
fs->Seek(0, soFromBeginning);
Erst danach kannst du den kompletten Inhalt des Streams auslesen lassen.
Sollte das noch nicht ausreichen, dann las den Stream erstmal von einem manuell erstellen TBitmap einlesen, und kopier dann desen Inhalt mittels Assign in das TImage.
bis bald
akari
-
So ok jetzt kann
maschinenbild->Picture->Bitmap->LoadFromStream(fs);
bestimmt nur Bitmaps also .bmp. Jedoch bekommt mein TIDHttp ein jpg.
Gott, so umständlich jemand sollte mal eine Komponente dazu schreiben.
Also jetzt klappt es soweit jedoch lade ich ja eine .jpg runter wie kann ich die jetzt anzeigen?Und noch etwas ladet TFileStream die datei runter?
Ich würde gerne das die Datei nur angezeigt wird wie im Internet Explorer also kein Download stattfindet.LG Adem
-
Hallo
estimmt nur Bitmaps also .bmp. Jedoch bekommt mein TIDHttp ein jpg.
Gott, so umständlich jemand sollte mal eine Komponente dazu schreiben.
Also jetzt klappt es soweit jedoch lade ich ja eine .jpg runter wie kann ich die jetzt anzeigen?Siehe FAQ, Thema JPEG. Habe gerade heute schon eine Frage zum Thema JPEG beantwortet.
Und noch etwas ladet TFileStream die datei runter?
Nein TStream ist nur ein allgemeines Auffangbecken. Der Download wird von der Indy-Komponente gemacht.
Übrigens könntest du mit TMemoryStream umgehen das der Stream erstmal eine Datei erstellt und wieder ausliest. Ist effizienter wenn du alles nur im Arbeitsspeicher brauchst.Ich würde gerne das die Datei nur angezeigt wird wie im Internet Explorer also kein Download stattfindet.
Ein Download muß immer stattfinden. Was du vermutlich meinst ist das Zwischenspeichern auf der Festplatte, was du mit dem bereits erwähnten TMemoryStream abkürzen kannst.
Übrigens : Auch der Internet Explorer speichert meistens seine Downloads bis zum kleinstens Bitmap, schau mal in den Internet-Cache deines Windows.bis bald
akari