![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: FireDac
Bild (BLOB) aus SQLite DB in TImage übertragen
Liebe Delphianer,
Mittlerweile geling es mir vermutlich Bilder von TImage als BLOB in eine SQLite DB zu schreiben. Warum vermutlich: weil ich's noch nicht wirklich verifizieren konnte. Daher möchte ich jetzt den umgekehrten Weg implementieren: Auslesen eines des Bildes in der DB und wieder Speicherung in einem TImage. Kann mir da jemand helfen? Gruss |
Korr: Bild (BLOB) aus SQLite DB in TImage übertragen
Entschuldigt, es ist mir ein Fehler unterlaufen:
Die Speicherung des BLOBs in die DB erfolgt nicht von TImage aus, sondern von TMemoryStream. Die folgenden beiden Zeilen mit LoadFromFile() laden das Bild in den MemoryStream ms bzw. in Image1 und wird damit angezeigt. VAR ms: TMemoryStream; ms.LoadFromFile('C:\Users\.....\IMG_2880.jpg'); Image1.Picture.LoadFromFile('C:\Users\.....\IMG_28 80.jpg'); Die Übertragung in die DB erfolgt übrigens mit INSERT INTO ... Rücklesen Die Aufgabe des Rücklesens besteht aus folgenden Schritten: 1. Auslesen des BLOBs aus DB und Speicherung in Stream 2. Stream in TImage übertragen oder vielleicht gibt es für 1. und 2. eine Kombination. |
AW: Bild (BLOB) aus SQLite DB in TImage übertragen
Ganz so einfach ist das Lesen nicht, da das Format des Bildes nicht ohne aufwendige Analyse des TBlobStream-Inhaltes aus den BLOB-Daten ermittelt werden kann. TImage oder TPicture.LoadFromFile benutzt halt die Datei-Extension um intern die richtige Graphic-Klasse (TBitmap, TPngImage, TJPegImage etc.) zu ermitteln, davon eine Instanz zu erzeugen, deren LoadFromFile-Methode aufzurufen und die Instanz an Image.Picture.Graphic zuzuweisen.
Die einfachste Lösung für dich ist das Imageformat in einem anderen Feld der Datentabelle mit abzuspeichern, z. B. die Datei-Extension der Orginaldatei. Du kannst die BLOB-Daten dann in eine temporäre Datei mit der gespeicherten Extension schreiben und die dann in das Image laden. |
AW: Bild (BLOB) aus SQLite DB in TImage übertragen
Zitat:
Bis bald... Thomas |
AW: Bild (BLOB) aus SQLite DB in TImage übertragen
Hallöle...8-)
@mytbo: ist mORMot in diesem Falle nicht etwas übertrieben? :zwinker: Zitat:
Beispiel: ![]() Liste der Header: ![]() :wink: |
AW: Bild (BLOB) aus SQLite DB in TImage übertragen
Zitat:
Bis bald... Thomas |
AW: Bild (BLOB) aus SQLite DB in TImage übertragen
Zitat:
P.S.: Wenn man diese Dateien mit IrfanView öffnet, bietet einem das Programm an, die falsche Erweiterung umzubenennen. |
AW: Bild (BLOB) aus SQLite DB in TImage übertragen
Hmm..
Zitat:
Dort ist als Link ein .jpg Bild aber der Server schickt dann (unter diesem Namen) auch mal gerne ein PNG oder WEBP. Dem Browser ist dies zur Anzeige egal, jedoch nicht dem "Bild Speichern unter", welches den JPG Filenamen verwendet. |
AW: Bild (BLOB) aus SQLite DB in TImage übertragen
Ich nutze hier TWICImage, da ich hier von einem Stream laden kann:
Beispielcode aus meinem ImagViewer:
Delphi-Quellcode:
procedure TImageViewer.doLoadFromStream(AStream: TStream);
Var AImage: TWICImage; begin AImage := TWICImage.Create; try AImage.LoadFromStream(AStream); ImageView.Picture.Bitmap.Assign(AImage); finally AImage.Free; end; end; Frank |
AW: Bild (BLOB) aus SQLite DB in TImage übertragen
Warum TImage?
PS: in 10.4 müsste es direkt/automatisch gehen, also mit ![]() oder via Image.Picture.LoadFromStream Früher ging es beim LoadFromFile automatisch, über die Dateiendung, aber bei LoadFromStream mußte man genau aufpassen, welches Dateiformat drin steckt. Aber inzwischen arbeitet "dieses" LoadFromStream mit MagicBytes, um sich zum Dateiformat den passenden TGrafic-Typ zu besorgen. (wenn die Unit für den notwendigen Typ im Programm eingebunden ist) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 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