Wenn ich es richtig verstanden habe, bestimmt TImage.LoadFromFile
den Typ des Bildes aus der Dateierweiterung.
Gibt es eine Möglichkeit, den Bildtyp automatisch von einem TBlobStream
mit einem Rohbild darin zu erkennen?
Mein aktueller Code:
%Vor%Siehe SO Antwort für den Abruf von Dateiinhalten aus der Kopfzeile.
Oder Sie können unsere TSynPicture
class , die alle Arten von Bildern (bmp / gif / tiff / jpg / png) mit Gdi + -Bibliothek in einer einzigen Klasse behandelt. So kann Ihre TPicture
diese einzigartige Klasse für jede Art von Bild sein. Mit weniger Code Overhead als die Jpeg oder PNG Delphi Einheiten.
Tatsächlich erkennt TPicture.LoadFromFile
den Dateityp und verwendet nur die Dateierweiterung. Sie müssen also den Header des Streams lesen, um den Dateityp zu erkennen.
Wenn Sie andererseits wissen, wie das Format aussieht, wenn Sie das BLOB in die Datenbank einfügen, können Sie diese Informationen immer als eigenen privaten Header zum BLOB hinzufügen.
Scheinbar magic Die bildscheue Handhabung für beliebige Bildformate ist eigentlich sehr einfach (um nicht zu sagen roh). Das Laden von Dateien hängt von der Dateierweiterung ab. Laden aus der Zwischenablage - in Zwischenablage Formatanzeige. Sehen? Es gibt immer ein Format-Tag, das TPicture anweist, welche TGraphicClass für die Daten zu verwenden ist, und die TGraphic-Basisklasse selbst bietet keinen Mechanismus zum Identifizieren "eigener" Datenströme neben der Versuch-und-Irrtum-Methode. Man könnte gespannt sein, wie sich TPicture aus dem DFM-Stream lädt, aber es ist keine Ausnahme, hier ist ein relevanter Auszug aus der Implementierung (urheberrechtlich geschützter Code nur zur Veranschaulichung):
%Vor%Tags und Links delphi stream delphi-2007 timage detect