[转] - 如何用QTcpSocket传送图片

我们知道,tcp网络编程发送数据是利用套接字来实现,将要传输的东西转化为数据流再进行传输,为了确保数据传输的准确性和安全性,我们在发送数据流前发送一个quint32的常量来表示所要发送的数据的大小;当我们要发送图片时,最关键的是获得图片的大小:

QBuffer buffer;

QPixmap(":/images/1.png").save(&buffer,"BMP");

知道了图片的大小就可以传输图片了;发送端:

QDataStream stream( &data, QIODevice::WriteOnly );
  stream.setVersion( QDataStream::Qt_4_0 );
  stream << (quint32)buffer.data().size();
  data.append( buffer.data() );

tcpSocket->write(data);

data.resize(0);

接收端:
int dataSize;

while(socket.byteAvaileble() > 0 )

{

if( dataSize == 0 )
  {
    QDataStream stream( &socket );
    stream.setVersion( QDataStream::Qt_4_0 );
  
    if( socket.bytesAvailable() < sizeof(quint32) )
      return;
      
    stream >> dataSize; //获取接受到的数据大小
  }
  
  if( dataSize > socket.bytesAvailable() )
    return;

QByteArray array = socket.read( dataSize );
  QBuffer buffer(&array);
  buffer.open( QIODevice::ReadOnly );
  
  QImageReader reader(&buffer, "PNG");
  QImage image = reader.read();

if( !image.isNull() )
  {
    ui.imageLabel->setPixmap( QPixmap::fromImage( image ) );
    ui.imageLabel->setText( tr("") );
   dataSize=0;
  }
  else
  {
  }

}

原文地址:http://blog.csdn.net/hsl17/article/details/6739171

时间: 2024-11-05 23:11:40

[转] - 如何用QTcpSocket传送图片的相关文章

客户端程序传送图片到服务器

转载:http://www.cnblogs.com/networkcomms/p/4314898.html 源码 (因为空间大小限制,不包含通信框架源码,通信框架源码请另行下载) 以前帮朋友做了一个图片采集系统,客户端采集相片后,通过TCP通信传送到服务器,本文把客户端传送图片到服务器的这部分提取出来. 由于每张图片的大小都不大,所以我们在传输图片时,没有采用传送文件的方式,而是采用了直接序列化图片的方式来进行. 当前支持的图片类型: jpg,png,gif 您可以自己添加扩充支持的图片类型 通

【问题收集·中级】关于XMPP使用Base传送图片

[问题收集·中级]关于XMPP使用Base传送图片 下面是我与博友的问答过程:并在最后链接附录了相应的文件: 博友问题:  16:35:38 他跟我说要 内容图片  base64编码 上传..博友问题:  16:35:45我用的是afn..怎么上传呢..擦博友问题:  16:35:46没做过我的回答:  16:36:20Base64就是把图片转成字符串博友问题:  16:36:26额.博友问题:  16:36:33怎么转 ?我的回答:  16:36:44你怎么上传字符串,就怎么上传我的回答:  

[c#源码分享]客户端程序传送图片到服务器

源码 (因为空间大小限制,不包含通信框架源码,通信框架源码请另行下载) 以前帮朋友做了一个图片采集系统,客户端采集相片后,通过TCP通信传送到服务器,本文把客户端传送图片到服务器的这部分提取出来. 由于每张图片的大小都不大,所以我们在传输图片时,没有采用传送文件的方式,而是采用了直接序列化图片的方式来进行. 当前支持的图片类型: jpg,png,gif 您可以自己添加扩充支持的图片类型 通信框架采用英国的开源的networkcomms2.3.1 通信框架   序列化器采用开源的protobuf.

Android:用Intent传送图片

三种方法对应三种情况: 1.传送本地res中的图片 如果是本地res中的资源文件可以用intent.putExtra(""id"", R.id.xxx);传递一个对应的id过去.在新activity中通过id取出图片.getResources().getDrawable(R.id.xxx); 传送图片的Activity: private ListView lstmenu; private int[] imageid={R.drawable.pic1,R.drawab

关于QQ传送图片文件的保存

日常生活工作有中,我们经常用QQ完成一些手机到电脑的文件传送,但是,在保存文件的时候我发现了一些问题. 当我将GIF文件用手机传到电脑,这时我们用电脑打开对话框,鼠标右键另存为命令,这时会发现,GIF图片只能以jpg格式存储了,这样导致的后果就是,我们想用电脑打开此文件时,只能看到第一帧而不能播放文件全部. 而我认为这也是许多人即使用了Quicktime仍旧无法播放GIF的原因,而且我也用PS试过,任何方式都是无法打开的,因为图片的属性错了,PS不知道怎样执行了. 而其实,以上操作只是操作上的错

如何用12864液晶显示图片和绘制任意函数图象(打点)

一. 显示图片 显示图片的要点在于:1.取模 2.利用扩展指令设置液晶3.清楚液晶地址的概念 1.1取模 取模软件用的是"字模221"下图是他的参数设置 这里对参数设置先解释一下,所谓横向取模就是,一张图片从图片最左上角的8位开始取模,从左向右,每次取8位二进制数据转化为16进制保存,第一排取完之后,接着到第二排最左边8位开始取模,以此类推.为什么要这样取模呢?因为12864液晶的横纵坐标就是这个取模顺序,这点在之后还会详细提到. 1.2液晶的设置 液晶显示图片必须用扩充指令集,初始化

【Canvas】如何用Canvas绘制图片

三种方式绘制图片drawImage() ①drawImage(三个参数) ②drawImage(五三个参数) ③drawImage(九个参数) 原文地址:https://www.cnblogs.com/moveup/p/9736014.html

如何用FtpWebRequest 传送巨大文件

一般如果碰到巨大文件,超过2GB,如果想小文件一样读入数组,肯定会碰到超过2GB上限的问题,64位操作系统一样有这个问题. 怎么办用Stream来解决,无论是读还是写都用Stream,一次读个几十K,写个几十K,在循环里反复读写, FTPWebRequest里有个GetRequestStream(),得到Stream后往里反复的写,就行了. 版权声明:本文为博主原创文章,未经博主允许不得转载.

常用科学作图与图片处理工具

在平时的学习与科研工作中,少不了画画示意图.处理一下实验和仿真数据并绘制曲线.也曾用过不少的软件,大体分为设计绘图.示意图绘制.数学绘图.转换工具四大类.将其总结在下面,以便今后专注于几个特定的工具,深入挖掘.熟能生巧.其中,若以制作高精度和矢量图作为第一要务,再辅之以方便易用.可以加入LaTeX符号,则符合这些条件的软件名以红色标出,加删除线者弃之不用. 设计绘图 GIMP对于普通用户来说,用于替代Photoshop完全没有问题. Inkscape用于绘制SVG矢量图,当然也可以将其导出成其它