Wie lade ich ein beliebiges Bild aus einem BLOB-Stream in ein TImage?

8

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%     
Jens Mühlenhoff 06.06.2011, 11:42
quelle

4 Antworten

16

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.

%Vor%     
Arnaud Bouchez 06.06.2011, 12:12
quelle
7

von hier aus können Sie es leicht tun: Ссылка

    
RBA 06.06.2011 11:46
quelle
2

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.

    
David Heffernan 06.06.2011 11:48
quelle
0

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%     
Premature Optimization 06.06.2011 13:19
quelle