![]() |
Datenbank: Firebird • Version: 3.0.2 • Zugriff über: firedac
TGraphicField JPGImage landen
Hallo
Ich spiele ein wenig herum und da ist mir aufgefallen das
Delphi-Quellcode:
Leider nur geht wenn der Stream eine Native Bitmap ist.
/// Middle Picture
ImMid.Picture.Graphic.SaveToStream(Stream); Stream.Position := 0; DataModule1.FDMemTableImage2.LoadFromStream(Stream); Stream.Clear; Bei DBImageMid.Picture.Assign(ImLeft.Picture); sieht man das Bild im JPG Format nur wenn man es speichern möchte alsi im Edit Mode ist, wird es nicht gespeichert. Geht das speichern in der Datenbank nur mit Bitmap Streams und nicht mit JPGs PNGs |
AW: TGraphicField JPGImage landen
Aus
![]() Zitat:
|
AW: TGraphicField JPGImage landen
Hallo Uwe
Danke für Deine Antwort. ich verstehe nicht ich habe nur XE7 Pro und geht das damit oder nicht wenn nich konvertiere ich das eben alles in eine Bitmap. |
AW: TGraphicField JPGImage landen
Nein, das geht erst ab Delphi 10.2 Tokyo.
|
AW: TGraphicField JPGImage landen
Danke Uwe
Einen schönen 1 Advents Sonntag wünsche ich Dir |
AW: TGraphicField JPGImage landen
Lieber Uwe ich habe da noch ein wenig rumgebastelt und
das kam dabei raus
Delphi-Quellcode:
Ich speichere die Grafikdaten in einem gewöhnlichen Blob und lade sie var Stream : TMemoryStream; JpgImage : TJpegImage; begin try Stream := TMemoryStream.Create; JpgImage := TJpegImage.Create; case _DatasetMode of dsm_Insert: DataModule1.FDMemTable.Edit; dsm_Append: DataModule1.FDMemTable.Append; end; /// Left Picture ImLeft.Picture.Graphic.SaveToStream(Stream); Stream.Position := 0; DataModule1.FDMemTableGraficBlob1.LoadFromStream(Stream); /// Middle Picture ImMid.Picture.Graphic.SaveToStream(Stream); Stream.Position := 0; DataModule1.FDMemTableGraficBlob2.LoadFromStream(Stream); Stream.Clear; /// Middle Picture ImRight.Picture.Graphic.SaveToStream(Stream); Stream.Position := 0; DataModule1.FDMemTableGraficBlob3.LoadFromStream(Stream); Stream.Clear; DataModule1.FDMemTableGraficBlob1.SaveToStream(Stream); Stream.Position := 0; JpgImage.LoadFromStream(Stream); DBImageLeft.Picture.Assign(JpgImage); DataModule1.FDMemTableGraficBlob2.SaveToStream(Stream); Stream.Position := 0; JpgImage.LoadFromStream(Stream); DBImageMid.Picture.Assign(JpgImage); DataModule1.FDMemTableGraficBlob3.SaveToStream(Stream); Stream.Position := 0; JpgImage.LoadFromStream(Stream); DBImageRight.Picture.Assign(JpgImage); PageControl1.TabIndex := 0; finally JpgImage.Free; Stream.Free; end; mit einem Stream nach TJPEGImage und dann in ein TImage. Kann man das so machen oder ist das nicht sinnvoll |
AW: TGraphicField JPGImage landen
Ist nicht sinnvoll, wenn unterschiedliche Dateitypen gespeichert werden. Solange du da nur JPEGs drin hast, mag das gehen.
Der Compiler wird meckern, denn Create gehört vor try. |
AW: TGraphicField JPGImage landen
Genau, ich würde es so schreiben (Geschmackssache, aber ich versuche verschachtelte Ressourcenschutzblöcke zu vermeiden):
Delphi-Quellcode:
Und wenn man andere Grafikformate unterstützen möchte, sollte man sich das Format zusätzlich abspeichern (Dateiendung, MIME-Type, Fremdschlüssel auf eine Formatdefinitionstabelle oder oder oder), das sollte auch funktionieren, wenn man sorgfältig arbeitet.
JpgImage := nil;
Stream := TMemoryStream.Create; try JpgImage := TJpegImage.Create; {... Code} finally JpgImage.Free; Stream.Free; end; |
AW: TGraphicField JPGImage landen
Super Danke DaddyH:thumb:
|
AW: TGraphicField JPGImage landen
Alternativ zum Umweg über den MemoryStream kann man sich auch gleich vom DataSet einen BlobStream geben lassen:
![]()
Delphi-Quellcode:
OT:
var
stream: TStream; JpgImage: TJpegImage; begin { Image in BlobField schreiben } stream := DataModule1.FDMemTable.CreateBlobStream(DataModule1.FDMemTableGraficBlob1, bmWrite); try ImLeft.Picture.Graphic.SaveToStream(stream); finally stream.Free; end; { Image aus BlobField lesen } JpgImage := TJpegImage.Create; try stream := DataModule1.FDMemTable.CreateBlobStream(DataModule1.FDMemTableGraficBlob1, bmRead); try JpgImage.LoadFromStream(Stream); finally stream.Free; end; ... finally JpgImage.Free; end; end; Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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