Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.221 Beiträge
 
Delphi 12 Athens
 
#6

AW: eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?

  Alt 16. Jan 2024, 14:40
bei Files weiß ich wie es geht:
Ist beim Stream nicht anders.

Stream.Position := 0;
und Stream.Read bzw. Stream.BlockRead

Wobei man beim TMemoryStream oder TBytesStream auch direkt auf den internen Speicher zufreifen kann.
Delphi-Quellcode:
if (MemoryStream.Size >= 2) and (PWord(MemoryStream.Memory)^ = 123465) then

if (BytesStream.Size >= 2) and (BytesStream.Bytes[0] = 123) and (BytesStream.Bytes[1] = 456) then



Wie Uwe bereits anmerkte, können neuere Delphis das Image-Format selbst checken.

"Alte" Delphis konnten das bei LoadFromStream noch nicht, da dort nur im LoadFormFile über die Dateiendung registrierter TGrafic-Typen gesucht wurde.

Und lleider kann man den Scheißdreck nicht selbst benutzen, da der Mist wieder mal nur in der Implementation versteckt ist.
siehe
Delphi-Quellcode:
procedure TPicture.LoadFromStream(Stream: TStream);
...
    GraphicClass := FileFormats.FindFormat(Stream);


[add] Bei den TGraphic-Nachfahren kann man zumindestens einzeln CanLoadFromStream abfragen.
Zuminstenst für TJPEGImage, TPngImage, TGIFImage, TBitmap, TIcon und TMetafile wurde es implementiert.
Es wäre natürlich auch viel zu einfach, wenn man einfach nur die FileFormats-Liste fragen könnte, ob und was es bezüglich des Streams kennt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Jan 2024 um 16:14 Uhr)
  Mit Zitat antworten Zitat