Wie wxImage in der Datenbank zu speichern, C ++ verwenden?
-
23-09-2019 - |
Frage
Ich habe einige wxImages und ich möchte sie speichern in eine BLOB (Binary Large Object) Feld in einer MySQL-Datenbank.
Es gibt keine Methoden in wxImage noch wxBitmap für die binären Daten als eine Anordnung von unsigned char
Erhalt so I in die Datenbank geladen werden kann
Meine aktuelle Problemumgehung ist das Bild in eine temporären Datei zu schreiben, lädt dann das BLOB-Feld direkt aus der Datei.
Gibt es eine effizientere Methode zum Laden und Speicher eines wxImage Objekts in ein MySQL-BLOB-Feld?
Ich verwende MySql C ++ Anschluss 1.05, MS Visual Studio 2008, WxWidgets und C ++.
Lösung
wxWidgets bietet keine API auf die Daten von wxBitmap
(weil es plattformabhängig), aber wxImage
ein gut definierte (und sehr einfach) verwendet Format, das Sie seine GetData()
Methode zugreifen können, wie oben erwähnt. Nur feststellen, dass Sie auch auf den Einsatz GetAlpha()
benötigen, wenn Sie Ihre Bilder haben Alpha-Kanal.
Dies ist jedoch nicht, wie ich es tun würde, weil die Daten sein werden großer , wenn Sie es so machen. Während es zu komprimieren, wie auch oben vorgeschlagen ist möglich, warum es manuell plagen tun, wenn bereits wxImage
Bild unterstützt Formate in eines der Standard-Bild zu schreiben. Erstellen Sie einfach ein wxMemoryOutputStream
und übergibt es an SaveFile()
. Dann einfach Zugriff auf Puffer der Strom direkt GetOutputStreamBuffer()->GetBufferStart()
und damit verbundene Funktionen.
Andere Tipps
Es sei denn, ich etwas fehle, konnte nicht verwenden Sie WxImage :: GetData ( http://docs.wxwidgets.org/2.8/wx_wximage.html#wximagegetdata ), um die Daten zu bekommen und dann :: GetHeight und :: GetWidth die Länge der Daten zu wissen, dass Zeiger auf? Der unsigned char *, die von WxImage :: GetData Aussehen zurückgeführt wird, wie es zu den RGB-Daten zeigen sollte, der das Bild bildet.