生のピクセルデータをQPixmapに変換しようとしましたが、qimageをqpixmapに変換中にエラーが発生しました。生のピクセルデータをQPixmapに変換する
まず、サーバAから生データをqlocalsocketで送信し、クライアント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();
}
}
サーバーですこれはエラーがQPixmapの:: fromImageながらQImageのに(unsigned char型*)データを変換しますが、エラーはありませんクライアント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));
}
です。
コードをデバッグすると、送信され受信されるデータは同じになります。
これは私のエラーです。 エラー:0xC0000005:0xCDCDCDD1の場所を読み取るアクセス違反。
ここで発生します。
#ifdef Q_COMPILER_RVALUE_REFS
static QPixmap fromImage(QImage &&image, Qt::ImageConversionFlags flags = Qt::AutoColor)
{
return fromImageInPlace(image, flags);
}
#endif
アイデアを感謝してください。
エラーは何ですか? – thuga
私はそれを更新しました。 エラー:0xC0000005:0xCDCDCDD1の場所を読み取るアクセス違反。 –
クライアントスニペットのコードが実行されたときに、すべてのデータが利用可能になっていますか?コードにいくつかのチェックを追加します。使用可能なバイト数を確認し、 'data'が' null'で、 'in.readBytes'の後に' size'の値があるかどうかを確認してください。 'QDataStream :: readBytes'の2番目のパラメータは読み込むサイズではなく、バッファのサイズを取得するために使用されます。 – thuga