Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: httpCLI: Download PNG funktioniert nicht, JPG geht

  Alt 8. Apr 2019, 20:24
So lädst du ein PNG in einen Stream und von dort direkt in ein TPngImage.

TImage, THttpCli, TButton auf Form ziehen, uses mit pngimage ergänzen.

Delphi-Quellcode:

uses …. pngimage;

function TForm80.getpngimage( quelle : string; png : TPngImage ):boolean;
var tm : TMemoryStream;
begin
  tm := TMemoryStream.Create;
 try
  httpcli1.RcvdStream := tm;
  httpcli1.URL := quelle;
  httpCli1.Get;
  tm.Position := 0;
  png.LoadFromStream( tm );
 finally
  tm.free;
 end;
end;

Aufruf:

Delphi-Quellcode:
  

procedure TForm80.Button1Click(Sender: TObject);
var quelle : string;
    hpng : TPngImage;
begin
  quelle := 'http://pngimg.com/uploads/olives/olives_PNG14287.png';
  hpng := TPngImage.Create;
 try
  getpngimage( quelle, hpng );
  image1.Picture.Assign( hpng );
 finally
  hpng.Free;
 end;
end;
Ich habe gerade gemerkt, dass den Funktionen noch kein Result zugewiesen wird . Sollte man noch tun.

Natürlich solltest du den Code erweitern - ist nur eine kurze Demo, welche funktioniert.
[Wenn du eine Anwendung schreibst, welche immer wieder die gleichen URLs auf neue Version abfragt, dann lohnt es sich die Bilder (etc.) zu "cachen". Beim Abrufen der Daten vom Server kannst du dann via HeaderData prüfen, ob die Datei bereits lokal vorhanden ist und falls Ja, den Download abbrechen.


Und wenn du Datei speichern willst:

Delphi-Quellcode:
function TForm80.geturl( quelle, ziel : string ):boolean;
var tf : TFileStream;
begin
  tf := TFileStream.Create( ziel, fmCreate or fmOpenWrite );
 try
  httpcli1.RcvdStream := tf;
  httpcli1.URL := quelle;
  httpCli1.Get;
 finally
  tf.free;
 end;
end;
Michael Gasser

Geändert von Michael II ( 8. Apr 2019 um 20:50 Uhr)
  Mit Zitat antworten Zitat