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.