ZBLOG

int dataSize = iHeight + iWidth; std::vector jpegData(pstDisplayImageInfo->pchBuffer, pstDisplayImageInfo->pchBuffer + dataSize); // 将原始数据复制到 std::vector img = cv::imdecode(jpegData, cv::IMREAD_GRAYSCALE); // 解码为 IMREAD_GRAYSCALE ...

要将原始 JPEG 数据(存储在 pstDisplayImageInfo->pchBuffer 中)直接转换为 QImage 而不使用 OpenCV 的 imdecode(),可以按照以下步骤进行。下面的代码假设您已经有一个有效的 JPEG 编码数据缓冲区,并将其转换为 QImage:

#include <QImage>
#include <vector>
#include <QByteArray>

// 假设 pstDisplayImageInfo->pchBuffer 是包含 JPEG 数据的指针
// 且 pstDisplayImageInfo->dataSize 是数据的大小

size_t dataSize = /* 这里设置正确的数据大小 */;
const uchar* jpegBuffer = pstDisplayImageInfo->pchBuffer;

// 使用 QByteArray 来封装 JPEG 数据
QByteArray byteArray(reinterpret_cast<const char*>(jpegBuffer), dataSize);

// 创建 QImage 对象,假设是灰度图像(IMREAD_GRAYSCALE)
QImage img;
if (!img.loadFromData(byteArray, "JPEG")) {
    // 处理加载失败的情况
    qDebug() << "Failed to load image from JPEG data.";
} else {
    // 成功加载,img 是一个有效的 QImage 对象
}

注意事项:

  1. 确保数据有效:确认 pstDisplayImageInfo->pchBuffer 实际上是有效且连续的 JPEG 数据,不要传递不完整或错误的数据。
  2. 指定数据大小:确保 dataSize 设置为 JPEG 数据的实际大小,而不仅仅是图像宽高之和。如果需要从结构中获取,可以检查该结构是否包含具体的数据长度信息。
  3. JPEG 类型:确保格式字符串与您的图片类型相匹配。在此示例中,我们假设是标准 JPEG 格式。

通过这种方式,您可以直接将 JPEG 数据转换为 QImage,而无需经过 OpenCV 的解码过程。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20454

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?