【问题标题】:Receiving jpeg through socket and yet unable to display on Qt通过套接字接收 jpeg 但无法在 Qt 上显示
【发布时间】:2017-10-14 23:07:35
【问题描述】:

我试图从我的客户端套接字发送和接收 jpeg 图像(图像大小:1kb 左右)。通过检查数据的大小,我已成功发送和接收图像数据。但是,当我尝试将图像数据传递到 QByteArray 并在 QImage 上显示时,什么都没有显示。下面的代码是接收和显示jpeg图片的sn-p。

Server.cpp

memcpy(&Rbuffer, ptr, msgCtl.iMsgLen - 8);
ptr += msgCtl.iMsgLen - 8;
cout << "Size of the image data recieve from the send buffer is " << sizeof(Rbuffer) << endl;
QByteArray ba = QByteArray::fromRawData(Rbuffer, sizeof(Rbuffer));
QBuffer qbuff(&ba);
qbuff.open(QIODevice::ReadOnly);
//QImageReader qimg  ("C:\\test.jpg");
QImageReader qimg (&qbuff,"JPG");
qimg.setDecideFormatFromContent(true);
qimg.setDevice(&qbuff);
QImage img = qimg.read();
if (!img.isNull()){
    cout << "no problem" << endl;
}
imageView->setPixmap(QPixmap::fromImage(img));

希望有人可以指导我。谢谢

【问题讨论】:

  • RBuffer 应该表示什么?您知道sizeof() 是一个编译时值,并且不知道在运行时确定的大小吗?
  • RBuffer 是接收器应该接收的图像数据。我认为通过使用 sizeof() 在发送方和接收方之间进行比较检查,以确保发送和接收都具有相同的数据大小。你介意指导我如何去做吗?

标签: c++ image qt sockets jpeg


【解决方案1】:

在 Windows 上,您必须将 imageformats 目录复制到您的构建目录。

例如。 C:\Qt\5.7\msvc2015_64\plugins\imageformatsmy_build_dir\imageformats

【讨论】:

  • 嗨,即使添加到我的构建目录后,它仍然无法正常工作。
【解决方案2】:

试试这个代码:

QPixmap scaledPixmap = QPixmap::fromImage(image).scaled(
                             QSize(imageWidth, imageHeight),
                             Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

imageView->setScaledContents(false);
imageView->setPixmap(scaledPixmap);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多