AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Bild (BLOB) aus SQLite DB in TImage übertragen
Thema durchsuchen
Ansicht
Themen-Optionen

Bild (BLOB) aus SQLite DB in TImage übertragen

Ein Thema von FediDelPr · begonnen am 20. Apr 2025 · letzter Beitrag vom 24. Apr 2025
Antwort Antwort
FediDelPr

Registriert seit: 16. Feb 2018
114 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt 20. Apr 2025, 23:24
Datenbank: SQLite • Version: 3 • Zugriff über: FireDac
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
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
114 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Korr: Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt 20. Apr 2025, 23:55
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.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
715 Beiträge
 
Delphi 12 Athens
 
#3

AW: Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt 21. Apr 2025, 12:23
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.
Peter Below
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
625 Beiträge
 
Delphi XE6 Enterprise
 
#4

AW: Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt Gestern, 09:47
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.
Das fällt einem dann auf die Füße, wenn mal wieder PNG Dateien mit der Erweiterung JPG gespeichert wurden. Keine Ahnung, wer das wo verbricht, aber diese Dateien begegnen mir in meinem Umfeld (Marketing Material) oft genug, so dass ich jedes Mal vor dem Laden teste.

P.S.: Wenn man diese Dateien mit IrfanView öffnet, bietet einem das Programm an, die falsche Erweiterung umzubenennen.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
984 Beiträge
 
Delphi 6 Professional
 
#5

AW: Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt Gestern, 10:31
Hmm..

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.
Das fällt einem dann auf die Füße, wenn mal wieder PNG Dateien mit der Erweiterung JPG gespeichert wurden. Keine Ahnung, wer das wo verbricht, aber diese Dateien begegnen mir in meinem Umfeld (Marketing Material) oft genug, so dass ich jedes Mal vor dem Laden teste.

P.S.: Wenn man diese Dateien mit IrfanView öffnet, bietet einem das Programm an, die falsche Erweiterung umzubenennen.
Das kommt z.B. dann vor, wenn jemand ein Bild aus dem Internet geladen hat!
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.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt Gestern, 10:57
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
Frank Reim
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
482 Beiträge
 
#7

AW: Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt 21. Apr 2025, 14:13
Mittlerweile geling es mir vermutlich Bilder von TImage als BLOB in eine SQLite DB zu schreiben.
Diese Artikel enthalten Beispiele, die das Gewünschte umsetzen:Vielleicht findest du hier eine Anregung.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.436 Beiträge
 
Delphi 12 Athens
 
#8

AW: Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt 22. Apr 2025, 07:28
Hallöle...

@mytbo: ist mORMot in diesem Falle nicht etwas übertrieben?

Zitat:
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.
Im Prinzip richtig. Aber aufwendig ist es nicht... Das Format des Bildes steht im Header des Streams.
Beispiel:
https://www.delphipraxis.net/155578-...-erkennen.html
Liste der Header:
https://en.wikipedia.org/wiki/List_of_file_signatures


Geändert von haentschman (22. Apr 2025 um 07:47 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
482 Beiträge
 
#9

AW: Bild (BLOB) aus SQLite DB in TImage übertragen

  Alt 22. Apr 2025, 13:52
@mytbo: ist mORMot in diesem Falle nicht etwas übertrieben?
mORMot ist für mich nicht nur ein weiteres Framework, sondern das Fundament meiner Pascal-Entwicklung. Ohne mORMot wäre Pascal in meinem Umfeld nicht mehr konkurrenzfähig - ich müsste mich von ihr als Entwicklungsplattform verabschieden. Ohne mORMot keine Embarcadero Delphi Subscription.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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