あるユーザーから別のユーザーにスクリーンショットを送信するソケットベースのプログラムを作成しています。送信する前に、スクリーンショットをバイト配列に変換する必要があります。スクリーンショットを に変換した後QByteArray
、配列の先頭に 4 バイトを挿入して、それが画像であることを示します (テキストなどではなく、画像であることを示す数字 20 です)。
ソケットを介してバイト配列を他のユーザーに送信した後、受信時に最初の 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();
}