可以将 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章

9.2 使用QImage类加载图片

使用 QImage::setText() 将二进制数据存储在 PNG 文件中

将 cv::mat 转换为 QImage

QT QImage 无法加载图片 png jpg

QT QImage 无法加载图片 png jpg

QImage 加载某些图像的方向错误