Как сохранить wxImage в базе данных, используя C ++? - PullRequest
0 голосов
/ 30 марта 2010

У меня есть некоторые wxImages, и я хотел бы сохранить их в поле BLOB (Binary Large OBject) в базе данных MySQL.

В wxImage или wxBitmap нет методов для получения двоичных данных в виде массива unsigned char, поэтому я могу загрузить их в базу данных.

Мой текущий обходной путь - записать изображение во временный файл, а затем загрузить поле BLOB непосредственно из файла.

Есть ли более эффективный способ загрузки и сохранения объекта wxImage в поле BLOB MySQL?

Я использую MySql C ++ разъем 1.05, MS Visual Studio 2008, wxWidgets и C ++.

Ответы [ 2 ]

1 голос
/ 31 марта 2010

wxWidgets не предоставляет API для данных из wxBitmap (потому что это зависит от платформы), но wxImage использует четко определенный (и очень простой) формат, к которому вы можете обратиться, используя метод GetData() как упомянутое выше. Просто обратите внимание, что вам может понадобиться использовать GetAlpha(), если ваши изображения имеют альфа-канал.

Однако я бы так не поступил, потому что данные будут огромными , если вы сделаете это так. Хотя сжатие, как также предлагалось выше, возможно, зачем делать это вручную, когда wxImage уже поддерживает запись изображения в любом из стандартных форматов изображения. Просто создайте wxMemoryOutputStream и передайте его SaveFile(). Затем просто получите доступ к потоковому буферу напрямую, используя GetOutputStreamBuffer()->GetBufferStart() и связанные с ним функции.

1 голос
/ 30 марта 2010

Если я что-то упустил, вы не могли бы использовать WxImage :: GetData (http://docs.wxwidgets.org/2.8/wx_wximage.html#wximagegetdata), чтобы получить данные, а затем :: GetHeight и :: GetWidth, чтобы узнать длину данных, на которые указывает указатель ? Знак без знака *, возвращаемый WxImage :: GetData, выглядит так, как будто он должен указывать на данные RGB, составляющие изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...