2010-03-30 68 views
0

我有一些wxImages,我想将它们存储到MySQL数据库中的BLOB(Binary Large OBject)字段中。如何使用C++将wxImage存储到数据库中?

wxImage也没有方法,wxBitmap获取二进制数据作为unsigned char数组,因此我可以加载到数据库。

我目前的解决方法是将图像写入临时文件,然后直接从文件加载BLOB字段。

是否有更高效的方法来加载和存储wxImage对象到MySQL BLOB字段?

我使用MySql C++连接器1.05,MS Visual Studio 2008,wxWidgets和C++。

回答

1

的wxWidgets不提供对数据的任何API从wxBitmap(因为它的平台依赖性),但wxImage使用,您可以访问使用其GetData()方法,以上述明确的(和非常简单的)格式。请注意,如果您的图像具有Alpha通道,您可能还需要使用GetAlpha()

但是,这不是我该怎么做,因为数据将是巨大的如果你这样做。如上所述,压缩它也是可能的,为什么wxImage已经支持以任何标准图像格式书写图像时手动操作。只需创建一个wxMemoryOutputStream并将其传递给SaveFile()即可。然后直接使用GetOutputStreamBuffer()->GetBufferStart()和相关函数直接访问流缓冲区。

+0

上次我尝试保存未压缩的数据,我无法从数据创建图像。当我走临时文件路线时,图像没有问题。 API说,除非你知道你在做什么,否则不要使用'SetData'。 – 2010-03-31 17:33:12

+0

即使我不这样做*不建议这样做,但仍然没有任何理由不应该这样做,所以我只能说在你的代码中肯定存在一些错误。不幸的是,没有任何额外的信息就不可能更精确。 – 2010-03-31 20:57:20

1

除非我遗漏了一些东西,难道你不能使用WxImage :: GetData(http://docs.wxwidgets.org/2.8/wx_wximage.html#wximagegetdata)来获取数据,然后:: GetHeight和:: GetWidth知道指针指向的数据的长度吗? WxImage :: GetData返回的无符号字符*看起来应该指向组成图像的RGB数据。

+0

你说得对。这应该工作。但是,您可能需要压缩数据。 – 2010-03-30 20:08:36

+0

一些MySQL BLOB示例说要对数据进行编码,以便它在可打印范围内以避免任何危险的二进制值。另外,如何从数据创建图像? – 2010-03-31 17:35:03

相关问题