gpt4 book ai didi

c++ - 将原始像素数据转换为 QPixmap

转载 作者:行者123 更新时间:2023-11-28 05:23:20 27 4
gpt4 key购买 nike

我正在尝试将原始像素数据转换为 QPixmap,但在将 qimage 转换为 qpixmap 时出现错误。

首先,我通过 qlocalsocket 从服务器 A 发送原始数据,客户端 B 获取它。

这是服务器 A。

    if (clientSocket)
{
if (clientSocket->isOpen())
{
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);

out.setVersion(QDataStream::Qt_5_7);
const char* rc_data = reinterpret_cast<const char*>(r_data);
out <<sizeof(strlen(rc_data))<< r_width << r_height << r_step;
out.writeBytes(rc_data, strlen(rc_data));

clientSocket->write(block);
clientSocket->flush();
}
}

这是客户 B。

    QByteArray block = connection->readAll();
QDataStream in(&block, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_5_7);
char* data;
size_t size;
int width;
int height;
int step;
while (!in.atEnd())
{
in >> size >> width >> height >> step;
in.readBytes(data,size);
}
mutex.lock();
receivePixmap = QPixmap::fromImage(QImage((unsigned char*)data, width, height, step, QImage::Format::Format_RGB888));
mutex.unlock();
ui.label->setPixmap(receivePixmap.scaled(ui.label->size(), Qt::KeepAspectRatio));
}

将 (unsigned char*)data 转换为 QImage 没有错误,但在 QPixmap::fromImage 时出错。

当我调试代码时,发送和接收的数据是相同的。

这是我的错误。错误:0xC0000005:读取位置 0xCDDCDD1 的访问冲突。

并且发生在这里。

    #ifdef Q_COMPILER_RVALUE_REFS

static QPixmap fromImage(QImage &&image, Qt::ImageConversionFlags flags = Qt::AutoColor)
{
return fromImageInPlace(image, flags);
}
#endif

请分享您的想法,谢谢。

最佳答案

序列化时,将大小组件写为 sizeof strlen(rc_data) ,即 sizeof (size_t) ,这可能比 data 的内容小得多(通常是 4 或 8 个字节)。当您重建图像数据时,您只读取该大小,因此 QImage现在指的是没有表示 width 所需的那么大的内存空间x height像素。

你需要写出data的实际长度为了成功读回它。 strlen(rcdata)几乎可以肯定是错误的衡量标准,因为它衡量的是以 null 结尾的字符串,而您的像素数据不是。没有完整的例子,就不可能告诉你应该如何确定 rc_data 的长度。 .

关于c++ - 将原始像素数据转换为 QPixmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41032881/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com