![]() |
JPG per Http einbinden
Hallo Gemeinde,
ich möchte in ein Objekt vom Typ TGraphic eine JPG-Datei laden. Funktioniert auch soweit. Versuche ich jedoch die Datei von einem Webserver zu laden, schlägt der Aufruf fehl:
Delphi-Quellcode:
Wie könnte man das umgehen? Ziel ist es, ein Bild in einem Grid (NextGrid) anzuzeigen (ObjectReference).
var pfad:string;
jpg:TGraphic; pfad:='http://192.168.0.1/bilder/bild.jpg'; jpg:=TJPEGImage.create; jpg.LoadFromFile(pfad); //->Pfad='C:\.....\Http:\192.168.0.1\Bilder\bild.jpg . . . . freeandnil(jpg); MFG Steffen |
Re: JPG per Http einbinden
die datei herunterladen und dann in jpg laden ?
Delphi-Quellcode:
mfg smallsmoker
uses
URLMon; [...] function DownloadFile(SourceFile, DestFile: string): Boolean; begin try Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0; except Result := False; end; end; |
Re: JPG per Http einbinden
Ja, die LoadFromFile Funktion kann nicht per HTTP downloaden, sondern nur lokale Dateien oder was per UNC-Pfad aus dem Netzwerk so zu erreichen ist.
Vom Ablauf her mußt Du die Datei runterladen, dann hast Du sie als Stream und den mußt Du Deinem TJPEGimage zuweisen.
Delphi-Quellcode:
Code ist ungetestet!
var
myClient: TidHTTP; myMemoryStream: TMemoryStream; myJPEG: TJPEGimage; begin myClient := TidHTTP.Create(Self); myMemoryStream := TMemoryStream.Create; myJPEG := TJPEGImage.Create; try myClient.Get('http://meinbild.de/bild.jpg', myMemoryStream); myMemoryStream.Position := 0; myJPEG.LoadFromStream(myMemoryStream); finally myJPEG.Free; myMemoryStream.Free; myClient.Free; end; end; |
Re: JPG per Http einbinden
Vielen Dank für die Tips..!!
Auf das "Runterladen" hätte ich auch kommen sollen ... :wall: .. naja, manchmal steht man auf dem Schlauch! Habe mich an der ersten Version orientiert, funktioniert sehr gut... Trotzdem Danke an euch BEIDE!! MFG Steffen |
Re: JPG per Http einbinden
Hey!
Sorry, dass ich in diesem realtiv alten Thread noch einmal poste, aber mein Problem passt dort einfach perfekt hin. Ich habe eine JPEG-Datei runtergeladen und möchte die jetzt aber auch bearbeiten können. Soweit ich weiß geht das nur mit bmp's, also hab ich folgendes versucht:
Delphi-Quellcode:
Als Parameter fordert die .Assign() Funktion einen TPersistent, kann es sein, das dort der Fehler liegt, weil mein JPEG nicht gespeichert ist?
var
myClient: TidHTTP; myMemoryStream: TMemoryStream; myJPEG: TJPEGimage; var bitm : TBitmap; //<---- begin myClient := TidHTTP.Create(Self); myMemoryStream := TMemoryStream.Create; myJPEG := TJPEGImage.Create; try myClient.Get('http://server/img.jpg', myMemoryStream); myMemoryStream.Position := 0; myJPEG.LoadFromStream(myMemoryStream); Image1.Picture.Graphic := myJPEG; //Das funktionier hervorragend bitm := TBitmap.Create; bmp_img.Assign(myJPEG); //Hier liegt das Problem!! Image1.Picture.Bitmap := bmp_img; finally myJPEG.Free; myMemoryStream.Free; myClient.Free; end; end; Generell habe ich mit der Funktion und JPEG-Dateien nie ein Problem gehabt, aber die kamen auch nie aus einem Stream... Hat jemand eine Idee, wieso da folgende Fehlermeldung kommt?? Zitat:
|
Re: JPG per Http einbinden
Hi,
du musst die Bitmap noch vorher erstellen. Also TBitmap.Create. Mfg FAlter |
Re: JPG per Http einbinden
Ja, ich hab mich oben vertippt, die Bitmap war schon erstellt, nur das Problem war, dass auch schon per .LoadFromFile() eine JPEG-Datei eingebunden war, was das Problem zu sein schein.
Ich habe das ganze mit einer "leeren" Bitmap versucht und voilà, es funktiuoniert :-) Trotzdem Danke für deinen Beitrag FAlter! Problem gelöst |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz