![]() |
Datenbank: MySQL • Version: 5.x • Zugriff über: MyDac
Bider in DB speicher und auslesen
hallo zusammen...
ich versuche gerade bild dateien in einer mysql db abzulegen und wieder aus der mysql zu laden und in einem TImage anzeigen zu lassen... das speichern in der db funktioniert im großen und ganzen... das habe ich wie folgt umgesetzt:
Delphi-Quellcode:
für das laden aus der mysql habe ich hier im forum die folgende funktion gefunden:
procedure TForm1.Button4Click(Sender: TObject);
var memStream : TMemoryStream; begin If (Length(Trim(Edit5.Text)) = 0) Or (Length(Trim(Edit6.Text)) = 0) Then Begin MessageDlg('File Information missing!', mtError, [mbOK], 0); Exit; End; memStream := TMemoryStream.Create; memStream.LoadFromFile(Edit6.Text); memStream.Position := 0; Try With (InsertData) Do Begin Active := False; SQL.Clear; SQL.Add('Insert Into picture ' +'(filename, filedata, filesize) ' +'Values(:filename, :filedata, :filesize)'); ParamByName('filename').AsString := Edit5.Text; ParamByName('filedata').LoadFromStream(memStream, TBlobType(0)); ParamByName('filesize').AsInteger := memstream.Size; ExecSQL; End; Except On E:EMySQLDatabaseError Do Begin MessageDlg('Could not insert Data' + #13 + E.Message, mtError, [mbOK], 0); End; End; memStream.Free; end;
Delphi-Quellcode:
bei jpeg dateien funktioniert es wunderbar, aber sobald ich z.b. eine bmp datei haben erhalte ich den fehler "jpeg fehler #53"
procedure TForm1.Button5Click(Sender: TObject);
var Stream : TStream; JPEG : TJpegImage; BITMAP : TBitmap; begin Try With (imagedata) Do Begin Active := False; SQL.Clear; SQL.Add('Select * From picture ' +'Where filename = "'+ GetData.FieldByName('filename').AsString +'" '); Active := True; End; Except On E:EMySQLDatabaseError Do Begin MessageDlg('Could not select image Data' + #13 + E.Message, mtError, [mbOK], 0); Exit; End; End; Stream := TStream.Create; Stream := imagedata.CreateBlobStream(imagedata.FieldByName('filedata'), bmRead); Stream.Position := 0; JPEG := TJpegImage.Create; BITMAP := TBitmap.Create; JPEG.LoadFromStream(Stream); BITMAP.Assign(JPEG); image.Picture.Bitmap.Assign(JPEG); Stream.Free; JPEG.Free; BITMAP.Free; end; ich denke mal das hängt mit dem datei typ zusammen unter dem das bild in die db geladen wurde, also das die obere funktion nur für jpeg dateien verwendbar ist... gibt es auch eine möglichkeit die daten zu laden und in einem TImage anzuzeigen ohne das ich an dateiformate gebunden bin? |
Re: Bider in DB speicher und auslesen
Zitat:
Du musst schon abhängig vom Stream-Header das Bild in ein Jpeg oder nur in das Bitmap laden. Entsprechendes gilt auch für PNG etc. |
Re: Bider in DB speicher und auslesen
kann ich mir über die "Stream" variable in meiner lese funktion auch die dateiendung ermitteln oder wäre es sinnvoller dies in der db ein einem feld mit abzulegen um zu wissen welches dateiformat man hat?
|
Re: Bider in DB speicher und auslesen
Zitat:
Zitat:
|
Re: Bider in DB speicher und auslesen
Wäre es nicht das einfachste, einfach alle Bilder als JPEGs in der DB zu speichern? Dazu muss man die Grafik vor dem Speichern ja nur konvertieren.
|
Re: Bider in DB speicher und auslesen
Zitat:
|
Re: Bider in DB speicher und auslesen
@deddyh
wie würde das mit dem konvertieren funktonieren? |
Re: Bider in DB speicher und auslesen
Entweder direkt mit Assign oder, falls das nicht geht, mit dem kleinen Umweg über eine temporäre Bitmap, auf die Du die Originalgrafik zeichnest. Diese Bitmap kannst Du dann dem JPEGImage zuweisen.
|
Re: Bider in DB speicher und auslesen
ich habs jetzt so gemacht das ich mir die info in der db mit speicher welches dateiformat ich importiert habe... im moment beschränk ich mich auf .bmp und .jpg
das laden sieht dann so aus:
Delphi-Quellcode:
andere werde ich vielleicht bei gelegenheit noch hinzufügen...
procedure TForm1.Button5Click(Sender: TObject);
var Stream : TStream; JPEG : TJpegImage; BITMAP : TBitmap; begin Try With (imagedata) Do Begin Active := False; SQL.Clear; SQL.Add('Select * From picture ' +'Where filename = "'+ GetData.FieldByName('filename').AsString +'" '); Active := True; End; Except On E:EMySQLDatabaseError Do Begin MessageDlg('Could not select image Data' + #13 + E.Message, mtError, [mbOK], 0); Exit; End; End; //JPG If UpperCase(imagedata.FieldByName('fileext').AsString) = 'JPG' Then Begin Stream := TStream.Create; Stream := imagedata.CreateBlobStream(imagedata.FieldByName('filedata'), bmRead); Stream.Position := 0; JPEG := TJpegImage.Create; BITMAP := TBitmap.Create; JPEG.LoadFromStream(Stream); BITMAP.Assign(JPEG); image.Picture.Bitmap.Assign(JPEG); Stream.Free; JPEG.Free; BITMAP.Free; End; //BMP If UpperCase(imagedata.FieldByName('fileext').AsString) = 'BMP' Then Begin Stream := TStream.Create; Stream := imagedata.CreateBlobStream(imagedata.FieldByName('filedata'), bmRead); Stream.Position := 0; BITMAP := TBitmap.Create; BITMAP.LoadFromStream(Stream); image.Picture.Assign(BITMAP); Stream.Free; BITMAP.Free; End; end; danke für eure hilfe |
Re: Bider in DB speicher und auslesen
Wozu die Bitmap bei JPEG?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 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