Как сохранить wxImage в базе данных, используя C++?
У меня есть некоторые wxImages, и я хотел бы сохранить их в поле BLOB (большой двоичный объект) в базе данных MySQL.
В wxImage и wxBitmap нет методов для получения двоичных данных в виде массива unsigned char
так что я могу загрузить в базу данных.
Мой текущий обходной путь - записать изображение во временный файл, а затем загрузить поле BLOB непосредственно из файла.
Есть ли более эффективный метод для загрузки и хранения объекта wxImage в поле MySQL BLOB?
Я использую MySql C++ разъем 1.05, MS Visual Studio 2008, wxWidgets и C++.
2 ответа
wxWidgets не предоставляет API для данных из wxBitmap
(потому что это зависит от платформы), но wxImage
использует четко определенный (и очень простой) формат, к которому вы можете получить доступ, используя его GetData()
метод, как указано выше. Просто обратите внимание, что вам может понадобиться GetAlpha()
а также если ваши изображения имеют альфа-канал.
Однако это не то, как я это сделаю, потому что данные будут огромными, если вы сделаете это так. Хотя сжатие, как также было предложено выше, возможно, зачем делать это вручную, когда wxImage
уже поддерживает написание изображения в любом из стандартных форматов изображений. Просто создайте wxMemoryOutputStream
и передать его SaveFile()
, Затем просто получите доступ к потоковому буферу напрямую, используя GetOutputStreamBuffer()->GetBufferStart()
и связанные функции.
Если я что-то упустил, не могли бы вы использовать WxImage::GetData ( http://docs.wxwidgets.org/2.8/wx_wximage.html), чтобы получить данные, а затем::GetHeight и::GetWidth, чтобы узнать длина данных, на которые указывает указатель? Знак unsigned char *, возвращаемый WxImage::GetData, выглядит так, как будто он должен указывать на данные RGB, из которых состоит изображение.