可以将 QImage 文件内容加载到 QString 吗?
Posted
技术标签:
【中文标题】可以将 QImage 文件内容加载到 QString 吗?【英文标题】:Possible to load QImage file contents to QString? 【发布时间】:2014-01-05 21:54:40 【问题描述】:是否可以使用 QT 加载图像文件的原始内容并将其作为 QString 使用?
我问的原因是因为我需要加载图像,加密图像数据,然后将其发送到服务器。所以我需要从图像中读取原始数据并在发送之前执行 rijndael-128 加密。
谢谢!
【问题讨论】:
QByteArray QByteArray::toBase64 () const => QString str = myImage.toBase64(); QString 用于文本(unicode),对于图像等原始数据使用 QByteArray。 @FrankOsterfeld:呵呵,我们同时在思考和写作。 :-) @Tom,答案有什么问题?为什么没有选一个? 【参考方案1】:图像数据不像 QString 那样辅助 UTF 字符的表示,所以这种转换思路听起来很奇怪。如果有的话,我建议使用 QByteArray 和/或 QDataStream 发送原始文件数据。
无论哪种方式,这里都是您可以用于原始问题的方法。这将是第一步,然后您可以构建您的 QByteArray 或 QString。请注意,这些方法返回 unsigned char,而不是上述类的构造函数所期望的 signed。
uchar * QImage::bits()
返回指向第一个像素数据的指针。这相当于scanLine(0)。
请注意,QImage 使用隐式数据共享。该函数执行共享像素数据的深拷贝,从而确保此 QImage 是唯一使用当前返回值的。
const uchar * QImage::bits() const
这是一个重载函数。
const uchar * QImage::constBits() const
返回指向第一个像素数据的指针。
注意QImage使用隐式数据共享,但是这个函数不会对共享的像素数据进行深拷贝,因为返回的数据是const。
【讨论】:
【参考方案2】:使用QImage::bits() 或QImage::constBits() 获取二进制(未压缩)图像数据。
在此处查看函数FreedesktopImage::FreedesktopImage(const QImage &img)
中的示例:
https://github.com/laanwj/bitcoin/blob/master/src/qt/notificator.cpp#L119 关于如何将数据复制到 QByteArray
。
但问题是,您真的需要在加密之前将图像文件加载到QImage
吗?你会做大量的图像处理吗?
【讨论】:
以上是关于可以将 QImage 文件内容加载到 QString 吗?的主要内容,如果未能解决你的问题,请参考以下文章