![]() |
Datenbank: AbsoluteDatabase • Version: 4.89 • Zugriff über: AbsoluteDatabase Komponenten
Image aus ImageComboBox in ein BlobField abspeichern
Hallo :wink:
ich habe zu meiner Frage hier im Forum leider nicht die passende Antwort gefunden. Es gab zwar schon viele Tipps und Tricks zu diesem Thema, aber für mein "Fall" konnte ich nichts passendes finden. Eines vorweg, ich möchte diesen Teil in meinem Programm genau so mit den Komponenten lösen. Ich habe hier viele andere Lösungsansätze gefunden, die aber bei mir so nicht funktionieren. Zu dem Problem: Ich habe in einer TImageComboBox (DevExpress) eine Liste mit Farbelementen vorgegeben. Jeder Einrag in der Liste besteht aus dem Image, einem Text wie die Farbe heißt und einem Value (Word) der die Verbindung zu einer ImageList hält. Wird jetzt in einem Dialog eine Farbe ausgewählt, soll aufgrund der Auswahl mit GetBitmap und dem Bildindex aus der ImageList die Grafik geholt werden und in dem BlobField abgespeichert werden. Die Lösungen die ich hier ge- funden habe, gingen immer über einen OpenPictureDialog oä. und haben dann die Daten in dem BlobField geschrieben.
Delphi-Quellcode:
Seit ein paar Stunden merke ich, das ich mich im Kreis drehe. Hat von euch noch einer eine Idee, wie man das
ImageBlobStream := TABSBlobStream(tABSTable.CreateBlobStream(tABSTable.FieldByName('Farbcode'),bmWrite));
iFarbe := TBitmap.Create; { das einzelne Bild } { Farben ist die gesamte ImageList } if Farben.GetBitmap(cxFarben.EditValue,iFarbe) then begin iInsulinFarbe.SaveToStream( -> ???); { hier kann ja nicht das ImageBlobStream rein ... } ImageBlobStream.CopyFrom(-> ???, -> ???.SizeOf) { und das kann ich auch nicht nehmen, weil ich das Bitmap nicht { in ein TStream bekomme } end; Problem lösen kann?? Bin für jeden Tipp dankbar. |
Re: Image aus ImageComboBox in ein BlobField abspeichern
Hallo,
ich kann das nicht testen, da ich die DevExpress Komponente nicht installiert habe, aber warum solltest du nicht in den ImageBlobStream schreiben können - vorausgesetzt du verwendest iFarbe statt iInsulinFarbe:
Delphi-Quellcode:
Vorweihnachtliche Grüße vom marabu
var
bsFarbCode: TStream; bmFarbe: TBitmap; iImage: integer; // index of image in imageList begin with tABSTable do bsFarbCode := CreateBlobStream(FieldByName('Farbcode'), bmWrite); bmFarbe := TBitmap.Create; iImage := cxFarben.EditValue; // musst du wissen, ob das okay ist if ilFarben.GetBitmap(iImage, bmFarbe) then bmFarbe.SaveToStream(bsFarbCode); bmFarbe.Free; bsFarbCode.Free; end; |
Re: Image aus ImageComboBox in ein BlobField abspeichern
:thumb: Danke an den vorweihnachtlich grüßenden Marabu! :cheers:
Ich weiß nicht was ich da gestern Abend zusammengetippt habe, jedenfalls klappt es so wie Marabu es beschrieben hat. :-D Dabei habe ich dann festgestellt :roll:, das in dem Grid die Daten nur angezeigt werden, wenn das Grafikformat auf JPEG steht, also muss ich anstatt TBitmap JPEG nehmen, aber das werde ich wohl noch hinbekommen. Hier im Forum standen zu diesem Thema ja genug Hinweise. Ich habe mich wohl davon etwas verwirren lassen, das Absolute Database eine eigene Variante vom TBlobStream nämlich TABSBlobStream hat. Naja egal, Exeptions tauchen auch nicht mehr auf und es funzt (bis auf das Format) :mrgreen: |
Re: Image aus ImageComboBox in ein BlobField abspeichern
Liste der Anhänge anzeigen (Anzahl: 1)
Ich nochmal :wink:
Ich habe jetzt nur noch das Problem, das mein Bitmap, das ich später in ein JPEG umwandel, nicht so ganz passend in dem BlobField im Grid angezeigt wird. Siehe Anhang. Wie kann ich das Bild so stretchen, das es in das Rechteck (55x8) reinpasst??? :roll: Hier der Sourcecode aus dem Programm:
Delphi-Quellcode:
und im Anhang das Ergebnis. Ich möchte dass das ganze Rechteck mit der Farbe gefüllt
[..]
bsFarbCode := DIAInsuline.CreateBlobStream(FieldByName('Farbcode'), bmWrite); bmFarbeBMP := TBitmap.Create; { das temp. Bitmap } bmFarbeJPG := TJPegImage.Create; { das JPEG } { Bild aus der Imageliste holen. Je nach Auswahl in der ComboBox } if InsulinFarben.GetBitmap(cxIW_ICBInsulinFarben.EditValue,bmFarbeBMP) then begin bmFarbeBMP.Width := 55; bmFarbeBMP.Height := 8; { Das wäre die Größe die im Grid angezeigt wird } bmFarbeJPG.Assign(bmFarbeBMP); { an das JPEG anhängen } bmFarbeJPG.SaveToStream(bsFarbCode); { und ab in den Stream } end; bmFarbeJPG.Free; { und zum Schluß raus aus dem Speicher } bmFarbeBMP.Free; bsFarbCode.Free; [..] ist. Hat einer eine Idee? |
Re: Image aus ImageComboBox in ein BlobField abspeichern
Hallo Holger,
wenn du der Bitmap nachträglich neue Dimensionen verpasst, dann wird sie nicht automatisch skaliert. Zum Skalieren kannst du die Methode StretchDraw() von TCanvas oder die Windows API Funktion StretchBlt() verwenden. Eventuell hält deine JPEG Komponente eine entsprechende Methode zum Skalieren für dich bereit. Unter uns - warum speicherst du nicht einfach den FarbCode in der Datenbank und malst das Rechteck zur Laufzeit mit der gewünschten Farbe an? Das Speichern einer Bitmap ist doch in deinem Anwendungsfall nicht wirklich notwendig - oder? Grüße vom marabu |
Re: Image aus ImageComboBox in ein BlobField abspeichern
Hallo Marabu,
unter uns gesagt: :wink: weil es zu einfach ist. :zwinker: Nein, im Ernst. Diese Farbcodes der Insuline sind identisch mit denen auf der Verpackung. Ich bin einfach zu faul diesen Farbcode in der Farbpalette rauszusuchen und zu vergleichen. Wir Diabetiker erkennen damit eben auch an der Farbe die richtigen Patronen und Verpackungen. Ich weiß keine sooooo dolle Begründung, aber deshalb habe ich mir die Bitmap´s bzw. JPEG aus dem Netz kopiert und habe so exakt die richtigen Farben in meinem Programm. :-D Die JPEG Komponente ist die Delphi Standard Komponente. Da habe eine Möglichkeit zum Skalieren nicht gefunden. Trotzdem danke für deine Hinweise, haben ja schon :coder2: geholfen |
Re: Image aus ImageComboBox in ein BlobField abspeichern
Mit einem Color-Picker kannst du sehr bequem den Code für eine beliebige Farbe bestimmen - einfach indem du den Cursor drauf hältst:
![]() marabu |
Re: Image aus ImageComboBox in ein BlobField abspeichern
Ok Marabu, ich werde den mal checken und dann ggf. die Struktur in der DB umstellen. Erstmal
danke für die Tipps. Werde, wenn das Projekt fertig ist, es hier mal einstellen. Auch wenn man als Nicht-Diabetiker mit einigen Funktionen nichts anfangen kann, so hoffe ich doch das ich ein paar Hinweise auf generelle Routinen bekommen kann. :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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