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