首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么将通过socket接收到的数据如(255,255,255),显示到绘图板下,求指教,

2012-12-28 
如何将通过socket接收到的数据如(255,255,255),显示到绘图板上,求指教,急,在线等本帖最后由 fengsuiyingdo

如何将通过socket接收到的数据如(255,255,255),显示到绘图板上,求指教,急,在线等
本帖最后由 fengsuiyingdong 于 2012-11-28 16:30:51 编辑 问题如下:

 我做的快视端接收外部传输过来的图像数据(包含两部分:帧头和图像数据),并即时在窗口显示图像。现在可以接收到数据,但不知如何实现显示图像

其中发送端的代码片断如下:
    QV_FrameHead qv_FrameHead;
    qv_FrameHead.Head = 0X3333;// 0X3333H
    qv_FrameHead.RowCount = 1;

    char sendBuffer[512];
    memcpy(sendBuffer,&qv_FrameHead,sizeof(qv_FrameHead));
    send(sockClient,sendBuffer,sizeof(qv_FrameHead),0);  //发送帧头数据

   send(sockClient, "255255255", strlen("255255255")+1, 0); //比如是图像数据
其中快视端接收数据代码如:

       char recvBuf[1024];    //用一大小为1024的数组存储接收到的图像数据(测试)
int flag;
flag =recv(sockConn, recvBuf,sizeof(recvBuf), 0);
recvBuf[flag]='\0';

     //从recvBuf中复制大小为结构体变量QV_Head相同的数据到QV_Head中,并返回QV_Head指针
     memcpy(&QV_Head,recvBuf,sizeof(QV_Head)); 

                    if(flag>0)
{
printf("第%d次接收数据为:\n\r",++i);

printf("QV_Head.Head=%d\n",QV_Head.Head);
printf("QV_Head.RowCount=%d\n",QV_Head.RowCount);
                           .....
                  }  //可以接收到的帧头数据并在cmd窗口打印出来
问题1 该怎么接收传输过来的图像数据
问题2 如何将接收到的图像数据以窗口的形式显示成图像(比如000 显示成一个黑色的像素,255255255 是一个白色的像素)。因为接收的过程我用的是控制台,是否需要转换成MFC程序呢?

其中:结构体QV_FrameHead为:
struct QV_FrameHead
{
int Head;// 0X3333H
unsigned int RowCount; // 发送数据的帧计数,从1开始
     .....  //其它属性
}



   求指教,求……小弟这点都尝试解决了一星期了还没成功,都快哭了都
[最优解释]
这个要看你的图像接收后做什么处理了,比如要显示在窗口上,肯定要创建一个窗口的,可以使用MFC开发,接收到头之后就可以确定图像的大小吧,然后recv这么大的图形数据就可以了,然后通过帧头数据构造一个BITMAPINFO对象,然后通过StretchDIBits函数图片Buffer和BitmapInfo结构来显示到DC上。
[其他解释]
用StretchDIBits函数,直接指定图片Buffer,需要传入图片信息BITMAPINFO。
[其他解释]
  能针对我的问题详细些吗?谢谢flyound
[其他解释]

服务端执行后将接收的数据打印出来如图所示。

发送端发送数据时代码如下:
  send(sockClient,sendBuffer,sizeof(qv_FrameHead),0);    //帧头数据
    send(sockClient, "123456789", strlen("123456789")+1, 0);//图像数据

我这边接收时(一、只接收了sendBuffer内的帧头数据,如何接收图像数据?)

         char recvBuf[1024];  
int flag;
flag =recv(sockConn, recvBuf,sizeof(recvBuf), 0);
recvBuf[flag]='\0';
memcpy(&QV_Head,recvBuf,sizeof(QV_Head));

二、我要将接收到的图像数据还原成图像,是否需要 将程序改成MFC的程序?(现在是console命令窗口类型的)

 请指点

热点排行