![]() |
Datenbank: Firebird • Version: 2 • Zugriff über: IBX
Blob per Stream aus DB lesen und in Imageview anzeigen
Hallo,
Ich möchte aus einem DB-Feld (Firebird) mittels Stream ein Bild (JPG) auslesen, um es in einer Komponente ImageView32 (Graphics32) anzeigen zu lassen. Bisher bin folgenden Weg gegangen, der auch funktionierte: Bild aus DB exportieren (SaveToFile), anschließend wieder in Image importieren (LoadFromFile). Ich möchte aber nun nicht mehr den Umweg über einen Dateiexport/-Import gehen, sondern mit Streams arbeiten. nach Recherche im Forum habe ich folgenden Lösungsansatz gefunden:
Delphi-Quellcode:
In der Zeile "ImageView32.Bitmap.LoadFromStream(s);" erhalte ich folgende Exception:
procedure TfrmZoom.FormShow(Sender: TObject);
var s: TMemoryStream; begin Screen.Cursor := crHourGlass; s := TMemoryStream.Create; TBlobField(DataModule1.DataSourceZugangsdaten.DataSet.FieldByName('SCREENSHOT')).SaveToStream(s); s.Position := 0; ImageView32.Bitmap.LoadFromStream(s); s.Free; Screen.Cursor := crDefault; end; ... EInvalidGraphic ... Bitmapimage is not valid ... Muss ich dem Stream sagen, dass er ein JPG-Bild enthält? Oder mache ich einen anderen Fehler? Mein alter Code (Dateiexport/-Import) lautetet folgendermaßen:
Delphi-Quellcode:
Danke für eure Antworten.
procedure TfrmZoom.FormShow(Sender: TObject);
begin Screen.Cursor := crHourGlass; TBlobField(DataModule1.DataSourceZugangsdaten.DataSet.FieldByName('SCREENSHOT')).SaveToFile(AktuellerProgrammPfad + 'temp.jpg'); ImageView32.Bitmap.LoadFromFile(AktuellerProgrammPfad +'temp.jpg'); Screen.Cursor := crDefault; end; Gruß echtet |
Re: Blob per Stream aus DB lesen und in Imageview anzeigen
Hi.
Hast du die Unit JPEG in den uses drin? |
Re: Blob per Stream aus DB lesen und in Imageview anzeigen
Hallo Berserker,
ja, die Unit JPEG ist unter USES eingebunden. Gruß, Echtet |
Re: Blob per Stream aus DB lesen und in Imageview anzeigen
Hallo Thimo,
du scheinst die Unit JPEG gar nicht zu verwenden. Du musst die JPG-Bilder mit der Komponente ![]() Freundliche Grüße |
Re: Blob per Stream aus DB lesen und in Imageview anzeigen
Hallo marabu,
danke für den entscheidenden Tip! Jetzt geht es auch. Ich habe den Code nun folgendermaßen umgeschrieben:
Delphi-Quellcode:
Viele Grüße,
procedure TfrmZoom.FormShow(Sender: TObject);
var s: TMemoryStream; JPGBild : TJPEGImage; tempBMP :TBitmap; begin Screen.Cursor := crHourGlass; s := TMemoryStream.Create; //StreamObjekt wird erzeugt TBlobField(DataModule1.DataSourceZugangsdaten.DataSet.FieldByName('SCREENSHOT')).SaveToStream(s); s.Position := 0; //Stream wird auf 0 positioniert JPGBild := TJPEGImage.Create; //JPEG wird erzeugt tempBMP := TBitmap.Create; //temporäres Bitmap wird erzeugt JPGBild.LoadFromStream(s); //JPEG lädt den Stream tempBMP.Assign(JPGBild); //Das JPEG-Bild wird dem temp. Bitmap zugewiesen ImageView32.Bitmap.Assign(tempBMP); // das temp. Bitmap wird dem ImageView zugewiesen s.Free; JPGBild.Free; tempBMP.Free; Screen.Cursor := crDefault; end; Thimo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 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