Как сохранить 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, из которых состоит изображение.

Другие вопросы по тегам