0

我有一些 wxImages,我想将它们存储到 MySQL 数据库中的BLOB(二进制大对象)字段中。

wxImagewxBitmap中没有用于将二进制数据作为数组获取的方法,unsigned char因此我可以将其加载到数据库中。

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

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

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

4

2 回答 2

1

除非我遗漏了什么,否则您不能使用 WxImage::GetData ( http://docs.wxwidgets.org/2.8/wx_wximage.html#wximagegetdata ) 来获取数据,然后使用 ::GetHeight 和 ::GetWidth 来了解指针指向的数据长度?WxImage::GetData 返回的 unsigned char * 看起来应该指向构成图像的 RGB 数据。

于 2010-03-30T19:48:13.460 回答
1

wxWidgets 不为来自的数据提供任何 API wxBitmap(因为它依赖于平台),但wxImage使用定义明确(并且非常简单)的格式,您可以使用GetData()上面提到的方法访问该格式。GetAlpha()请注意,如果您的图像具有 alpha 通道,您可能也需要使用。

然而,这不是我会这样做的,因为如果你这样做,数据将会很大。wxImage虽然压缩它,正如上面所建议的那样,是可能的,但是当已经支持以任何标准图像格式写入图像时,为什么还要手动进行呢。只需创建一个wxMemoryOutputStream并将其传递给SaveFile(). GetOutputStreamBuffer()->GetBufferStart()然后简单地使用和相关函数直接访问流缓冲区。

于 2010-03-30T22:50:18.140 回答