1 将图片转为QByteArray传输
QBuffer buffer;
buffer.open(QIODevice::ReadWrite);//pixmap不能为空,必须先将图片加载到pixmap中
pixmap.save(&buffer,"jpg");
QByteArray pixArray;
pixArray.append(buffer.data());
2 将QByteArray转为图片显示
//假设内存中的图片为bytearr
string bytearr = “\\377\\330\\377\\340\\000\\020JFIF\\000\\001\\001\\000\\000\\001\\000\\001\\000\\000\\377\\333\\000C\\000\\n\\007\\007\\010\\007\\006\\n\\010\\010\\010\\013\\n\\n\\013\\016\\030\\020”;
QByteArray array;
// std::string => QByteArray
array(bytearr.c_str(), bytearr.length());
QBuffer buffer(&array);
buffer.open(QIODevice::ReadOnly);
QImageReader reader(&buffer,"JPG");
QImage img = reader.read();
if(!img.isNull()){
QPixmap pix = QPixmap::fromImage(img);
ui->showImageLabel->setPixmap(pix.scaled(ui->showImageLabel->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
}
std :: string到QByteArray的转换
PS: QString只有在数据是文本的时候才能使用,而不是二进制的。
C风格
// std::string => QByteArray
QByteArray byteArray(stdString.c_str(), stdString.length());
// QByteArray => std::string
std::string stdString(byteArray.constData(), byteArray.length());
从Qt 5.4开始,通过和QByteArray建立了对std::string转换的支持。
QByteArray::toStdString() QByteArray::fromStdString()
inline std::string QByteArray::toStdString() const
{ return std::string(constData(), length()); }
inline QByteArray QByteArray::fromStdString(const std::string &s)
{ return QByteArray(s.data(), int(s.size())); }