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 ++.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top