【问题标题】:Possible to load QImage file contents to QString?可以将 QImage 文件内容加载到 QString 吗?
【发布时间】:2023-03-14 23:35:01
【问题描述】:

是否可以使用 QT 加载图像文件的原始内容并将其作为 QString 使用?

我问的原因是因为我需要加载图像,加密图像数据,然后将其发送到服务器。所以我需要从图像中读取原始数据并在发送之前执行 rijndael-128 加密。

谢谢!

【问题讨论】:

  • QByteArray QByteArray::toBase64 () const => QString str = myImage.toBase64();
  • QString 用于文本(unicode),对于图像等原始数据使用 QByteArray。
  • @FrankOsterfeld:呵呵,我们同时在思考和写作。 :-)
  • @Tom,答案有什么问题?为什么没有选一个?

标签: c++ qt qstring qtgui qimage


【解决方案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 吗?你会做大量的图像处理吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多