한 사용자의 스크린 샷을 다른 사용자에게 보내려면 소켓 기반 프로그램을 만들고 있습니다. 전송하기 전에 스크린 샷을 바이트 배열로 변환해야합니다. 내 스크린 샷을 QByteArray
으로 변환 한 후 배열의 시작 부분에 4 바이트를 삽입하여 그림임을 표시합니다 (숫자 20은 그림이고 텍스트가 아님).QPixmap.loadFromData()가 QByteArray에서 이미지를로드하지 않습니다.
다른 사용자에게 소켓을 통해 바이트 배열을 보낸 후에 수신되면 처음 4 바이트를 읽으면 무엇인지 알 수 있습니다. 사진 이었기 때문에 나는 QByteArray
에서 QPixmap
으로 변환하여 레이블에 표시했습니다. 로드하려면 secondPixmap.loadFromData(byteArray,"JPEG")
을 사용하지만 어떤 그림도로드하지 않습니다.
void MainWindow::shootScreen()
{
originalPixmap = QPixmap(); // clear image for low memory situations
// on embedded devices.
originalPixmap = QGuiApplication::primaryScreen()->grabWindow(0);
scaledPixmap = originalPixmap.scaled(500, 500);
QByteArray bArray;
QBuffer buffer(&bArray);
buffer.open(QIODevice::WriteOnly);
originalPixmap.save(&buffer,"JPEG",5);
qDebug() << bArray.size() << "diz0";
byteArray= QByteArray();
QDataStream ds(&byteArray,QIODevice::ReadWrite);
int32_t c = 20;
ds << c;
ds<<bArray;
}
void MainWindow::updateScreenshotLabel()
{
this->ui->label->setPixmap(secondPixmap.scaled(this->ui->label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
void MainWindow::on_pushButton_clicked()
{
shootScreen();
}
void MainWindow::on_pushButton_2_clicked()
{
secondPixmap = QPixmap();
QDataStream ds(&byteArray,QIODevice::ReadOnly);
qint32 code;
ds>>code;
secondPixmap.loadFromData(byteArray,"JPEG");
updateScreenshotLabel();
}
해결 부탁드립니다. – amir