Qt Socket传输图片(一)
在开始之前,先了解下常见图片的几种格式。
① BMP(.bmp)
位图图像是Microsoft为 Windows 开发的格式。 bmp 文件没有压缩或信息丢失,这使得图像具有质量很高,当然图像文件也就比较大。
② JPEG(.jpg .jepg)
是一种有损格式,意味着图像被压缩成较小的文件。虽然压缩图像会造成图像有所损失,但是是在可接受范围内的。这种图片格式在互联网上比较常见。
③ GIF(.gif)
GIF广泛用于 Web 图形,因为它们仅限于 256 中颜色,可以允许透明度,还可以设置动画。 GIF 文件通常很小,即使被压缩也不会降低质量。
④ PNG(.png)
PNG最初旨在替换 gif 格式文件,是一种便携式无损图像格式。与 gif 所支持的 256 种颜色不同, png 文件可以处理多达 1600 万种颜色。 ( 表示不懂。。。 )png 文件也比较小,同样压缩也不会降低图像质量。
接下来了解下Qt对图像处理的支持:
可以使用 QLabel 轻松地在屏幕上显示 QPixmap 。 QLabel 有一个 pixmap 属性 。
程序平台:ubuntu 14.04、 Qt5.5.1 、 python2.7
void Widget::slot_readClientData()
{
QByteArray buffer;
buffer = mp_clsTcpClientConnnect->readAll();
if(buffer.size() < 15)
{
qDebug() << “Receive Data str:” << buffer.size() << buffer;
}
if(buffer.size() == 24518)
{
QPixmap pix;
bool ret = pix.loadFromData(buffer,“png”);
//show
if(ret)
ui->lb_picture->setPixmap(pix.scaled(250,200)); // 500 * 375
// QFile file(“in.png”);
// if (!file.open(QIODevice::WriteOnly))
// {
// qDebug() << "failed!";
// return;
// }
// file.write((const char*)buffer,24518);
// file.close();
qDebug() << “Receive Data str:” << buffer.size();
}
}
程序主体部分不多,使用之前的python脚本发送图像,使用 Qt 作为服务器接收。先接收图像字节大小,之后如果接收到图像字节,则使用 QPixmap 直接加载为 png 格式图像,如果加载成功则直接在 QLabel 上显示。下面被屏蔽的是直接将字节存储为对应图片格式的文件,也是可以存储为图片的,毕竟一切接文件。
程序运行结果图片:
程序上也不是很复杂,只是开始接触的时候很蒙圈。在网上搜索的读的也不是很懂,所以自己写了一遍又整理了下。之后会分享一个Qt发送和接收图片的例子。
本文主要供学习使用,如果转载请注明作者与出处,谢谢。