Einzelnen Beitrag anzeigen

Echtet

Registriert seit: 5. Jan 2004
Ort: Dortmund
21 Beiträge
 
Delphi XE3 Professional
 
#1

Blob per Stream aus DB lesen und in Imageview anzeigen

  Alt 16. Jul 2008, 09:58
Datenbank: Firebird • Version: 2 • Zugriff über: IBX
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:
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;
In der Zeile "ImageView32.Bitmap.LoadFromStream(s);" erhalte ich folgende Exception:
... 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:
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;
Danke für eure Antworten.

Gruß
echtet
Thimo Echtermann
  Mit Zitat antworten Zitat