传输图片



void MainWindow::sendData()
{
QByteArray Data;
QBuffer buffer;
buffer.open(QIODevice::ReadWrite);
QDataStream out(&Data,QIODevice::ReadWrite); // out将数据写到(输入)到data中 <<
displayImage();
iMage->save(&buffer,"jpg");

out.setVersion(QDataStream::Qt_5_8);//序列化格式设置版本号
out<<(quint32)buffer.data().size();
Data.append(buffer.data());

this->qtcpsocket->open(QTcpSocket::ReadWrite);
this->qtcpsocket->write(Data);


Data.resize(0);
buffer.reset(); //回收内存

}

void MainWindow:: displayImage()
{
FILE *fp;
char file[1024 * 10 * 10] = {0};
char name[100] = {0};

sprintf(name,"C:\\shiyan\\%d.jpg",count ++); //注意在windows下的绝对路径要这样写
fp = fopen(name,"rb"); //可读写的二进制文件 fb是文件标识符(int)
if(fp == NULL)
{
qDebug()<<"open failed ";
}
fread(&file,sizeof(file),1,fp);
fclose(fp);
qDebug()<<"count "<<count;

if(count == 7) count = 1;
iMage = new QImage((unsigned char *)file,0,0,QImage::Format_RGB16);
bool isOk = iMage->loadFromData((unsigned char *)file,sizeof(file)); //给定二进制的第一个len加载图像
qDebug()<<QString("isok: %1 ").arg(isOk);
if (isOk)
{

ui->label->setScaledContents(true); //填充所有可用空间
ui->label->setPixmap(QPixmap::fromImage(*iMage,Qt::AutoColor)); //制定的标志替换了PIXMAP的数据
}

}