我有一些wxImages,我想将它们存储在MySQL数据库的BLOB(二进制大对象)字段中。
wxImage和wxBitmap中没有方法可以将二进制数据作为unsigned char
数组获取,因此我可以加载到数据库中。
我目前的解决方法是将图像写入临时文件,然后直接从文件中加载BLOB字段。
是否有更有效的方法将wxImage对象加载并存储到MySQL BLOB字段中?
我正在使用MySql C ++连接器1.05,MS Visual Studio 2008,wxWidgets和C ++。
答案 0 :(得分:1)
除非我遗漏了什么,否则你不能使用WxImage :: GetData(http://docs.wxwidgets.org/2.8/wx_wximage.html#wximagegetdata)来获取数据然后使用:: GetHeight和:: GetWidth来知道指针所指向的数据的长度? WxImage :: GetData返回的unsigned char *看起来应该指向构成图像的RGB数据。
答案 1 :(得分:1)
wxWidgets不为来自wxBitmap
的数据提供任何API(因为它取决于平台),但wxImage
使用定义明确(且非常简单)的格式,您可以使用其{ {1}}如上所述的方法。请注意,如果您的图片具有Alpha通道,则可能需要使用GetData()
。
然而,我不是这样做的,因为如果您这样做,数据将巨大。如上所述,压缩它是可能的,当GetAlpha()
已经支持以任何标准图像格式写入图像时,为什么还要手动进行压缩。只需创建wxImage
并将其传递给wxMemoryOutputStream
即可。然后直接使用SaveFile()
和相关函数直接访问流缓冲区。