Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi JPG per Http einbinden (https://www.delphipraxis.net/119167-jpg-per-http-einbinden.html)

WIng2005 21. Aug 2008 11:05


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:
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);
Wie könnte man das umgehen? Ziel ist es, ein Bild in einem Grid (NextGrid) anzuzeigen (ObjectReference).

MFG
Steffen

smallsmoker 21. Aug 2008 11:16

Re: JPG per Http einbinden
 
die datei herunterladen und dann in jpg laden ?


Delphi-Quellcode:
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;
mfg smallsmoker

kachel81 21. Aug 2008 11:18

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:
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;
Code ist ungetestet!

WIng2005 21. Aug 2008 11:51

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

TheThrust 11. Jan 2009 15:08

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:
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;
Als Parameter fordert die .Assign() Funktion einen TPersistent, kann es sein, das dort der Fehler liegt, weil mein JPEG nicht gespeichert ist?
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:

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00487C29 in module 'Project1.exe'. Read of address 00000000'. Process stopped. Use Step or Run to continue.
Vielen Dank noch an kachel81 für den Quelltext!

FAlter 11. Jan 2009 15:58

Re: JPG per Http einbinden
 
Hi,

du musst die Bitmap noch vorher erstellen. Also TBitmap.Create.

Mfg
FAlter

TheThrust 11. Jan 2009 16:03

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:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz