![]() |
Datenbank: Absolute Database • Version: 6 • Zugriff über: ABS-Komponenten
PNG-Bild aus BLOB-Feld in Image laden
Hallo zusammen,
ich versuche gerade ein PNG-Bild, welches in einem BLOB-Feld einer Datenbank liegt, in eine Image-Komponente zu bekommen. Die Image-Komponente kann auch PNG darstellen, das Laden eines PNG-Bildes mittels OI funktioniert jedenfalls problemlos. Speichere ich das Bild in einem FileStream und speicher es, dann kann ich es auch problemlos öffnen, also am Zugriff auf die DB oder an einem "korrupten" Header scheint es nicht zu liegen. Nach dem Aufrufen der Funktion erhalte ich eine Zugriffsverletzung...
Delphi-Quellcode:
Kann sich jemand vorstellen, warum das nicht funktioniert???
var
BlobStream: TStream; aq : tabsquery; begin aq := tabsquery.Create(nil); aq.DatabaseName := 'xyz'; aq.SQL.Add('SELECT bild FROM tbltest WHERE id = 1'); aq.Open; BlobStream := aq.CreateBlobStream(aq.FieldByName('bild'),bmRead); ImageAnswer.Picture.Graphic.LoadFromStream(BlobStream); // liegt auf der Form!!! BlobStream.Free; aq.Close; aq.Free; end; Danke im Voraus, Michael |
AW: PNG-Bild aus BLOB-Feld in Image laden
Besser:
Delphi-Quellcode:
In welcher Zeile kommt die Zugriffsverletzung
aq.SQL.Text := 'SELECT bild FROM tbltest WHERE id = 1';
|
AW: PNG-Bild aus BLOB-Feld in Image laden
Du musst das PNG erst in eine temporäre Instanz der PNG-Imagekomponente laden. TPicture kann nur beim laden aus einer Datei über die Dateiextension das Grafikformat erkennen. Beim Stream als Stream müsste hier noch der Klassenname der entsprechenden Grafikkomponente am Anfangen stehen. Einfach mal ein PNG mit der IDE zuweisen und dann die DFM anschauen. Dort steht etwas in der Art: "TPNGImage" vor den eigentlichen PNG-Stream.
|
AW: PNG-Bild aus BLOB-Feld in Image laden
Zitat:
@mkinzler: die Zugriffsverletzung kommt beim "..LoadFromStream(...);". wie gesagt, die gleiche Anweisung mit einem TFileStream funktioniert problemlos. Es müsste wohl tatsächlich ein spezifisches Problem mit dem Laden in die TImage-Komponente sein. Danke schonmal! |
AW: PNG-Bild aus BLOB-Feld in Image laden
Zitat:
|
AW: PNG-Bild aus BLOB-Feld in Image laden
Tipp: Nutze doch bitte try-finally-Blöcke:
Delphi-Quellcode:
:thumb:
aq := tabsquery.Create(nil);
try // Tue etwas mit aq finally aq.Free; end; |
AW: PNG-Bild aus BLOB-Feld in Image laden
Zitat:
|
AW: PNG-Bild aus BLOB-Feld in Image laden
Zitat:
Speicherst Du PNG auch im Blobfeld und ist der Code, wenn ja, "äquivalent"? Liebe Grüße, David |
AW: PNG-Bild aus BLOB-Feld in Image laden
Delphi-Quellcode:
var png: TPngImage;
... png := TPngImage.Create; png.LoadFromStream(BlobStream); Picture.Graphic.Assign(png); ... |
AW: PNG-Bild aus BLOB-Feld in Image laden
Alte Delphis schauten immer nur auf die Dateiendung, also nur im Picture.LoadFromFile,
aber seit einer Weile ist im Picture.LoadFromStream ein Code drin, der auf die MagicBytes (FileHeader) guckt. Drum geht es jetzt auch direkt mit
Delphi-Quellcode:
,
Image.Picture.LoadFromStream(BlobStream);
ohne dass man vorher selber im Image.Picture.Graphic den "richtigen" Typ bereitstellen muss. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz