Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Grafik aus Internet laden - korrekter Weg (https://www.delphipraxis.net/213126-grafik-aus-internet-laden-korrekter-weg.html)

BigAl 1. Jun 2023 09:37

Grafik aus Internet laden - korrekter Weg
 
Hallo zusammen,

ich lade eine SVG-Graphic aus dem Internet wie folgt:

Delphi-Quellcode:
function GetPicture(HTTP: TIdHTTP; APictureName: string): TPicture;
  var
    Stream: TMemoryStream;
    SVGGraphic: TfrxSVGGraphic;
  begin
    Result := nil;
    Stream := TMemoryStream.Create;
    try
      HTTP.Get(BASE_URL + '/data/' + APictureName, Stream);

      SVGGraphic := TfrxSVGGraphic.Create;
      try
        Stream.Position := 0;
        SVGGraphic.LoadFromStream(Stream);

        Result := TPicture.Create;
        try
          Result.Graphic := SVGGraphic;
        except
          FreeAndNil(Result);
        end;
      finally
        SVGGraphic.Free;
      end;
    finally
      Stream.Free;
    end;
  end;
Das ganze funktioniert soweit auch. Ich frage mich nur, ob das der korrekte Weg ist.

Die Grafik befindet sich nach dem "Get" im Stream. In dem Fall weiß ich, dass es sich um eine SVG-Grafik handelt. Das ist allerdings der Punkt der mich stört. Was ist, wenn es sich um ein anderes Format handelt (bmp, png...)?

Gibt es eine Möglichkeit den Stream direkt (ohne TfrxSVGGraphic) in TPicture zu laden bzw. TPicture einfach vorab mitzuteilen um welches Format es sich handelt? Das Format könnte ich ja aus dem Namen ermitteln. Ich habe da irgendwie nichts gefunden.

Wie macht ihr sowas?

Neutral General 1. Jun 2023 09:57

AW: Grafik aus Internet laden - korrekter Weg
 
Result.LoadFromStream sollte einfach funktionieren

BigAl 1. Jun 2023 09:59

AW: Grafik aus Internet laden - korrekter Weg
 
Zitat:

Zitat von Neutral General (Beitrag 1522953)
Result.LoadFromStream sollte einfach funktionieren

Nein. Das knallt leider: Project <> raised exception class EInvalidGraphic with message 'Unsupported stream format'.

Neutral General 1. Jun 2023 10:25

AW: Grafik aus Internet laden - korrekter Weg
 
Das Problem ist dass TfrxSVGGraphic TGraphic.CanLoadFromStream nicht überschreibt.
Du könntest/müsstest das selbst ergänzen. Entweder im Original Source oder besser in einer abgeleiteten Klasse falls das in deinem Fall möglich wäre.

BigAl 1. Jun 2023 10:26

AW: Grafik aus Internet laden - korrekter Weg
 
Zitat:

Zitat von Neutral General (Beitrag 1522955)
Das Problem ist dass TfrxSVGGraphic TGraphic.CanLoadFromStream nicht überschreibt.
Du könntest/müsstest das selbst ergänzen. Entweder im Original Source oder besser in einer abgeleiteten Klasse falls das in deinem Fall möglich wäre.

Das werde ich mal versuchen. Ich müsste das dann einfach als zusätztliches Grafikformat registrieren...

Danke für den Tip.

Neutral General 1. Jun 2023 10:28

AW: Grafik aus Internet laden - korrekter Weg
 
Registriert ist es schon. Das Problem ist dass CanLoadFromStream nicht implementiert ist was anhand der Bytes in dem Stream (statt der Dateiendung) checkt ob es eine gültige Datei des entsprechenden Formats ist.

Du kannst wahrscheinlich einfach TfrxSVGGraphicFormat.IsSupportedFormat benutzen in deiner überschriebenen CanLoadFromStream Methode


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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