前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt Socket传输图片(一)

Qt Socket传输图片(一)

作者头像
用户5908113
发布2019-08-06 10:42:58
3.3K0
发布2019-08-06 10:42:58
举报
文章被收录于专栏:Pou光明

上次简单实现了python发送和接收图片的Demo,本次通Qt的接收图片,并显示在QLabel上。

在开始之前,先了解下常见图片的几种格式。

①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

代码语言:javascript
复制
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发送和接收图片的例子。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档