首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • ]××网络传输屏幕的问题××
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-21 20:22:10 楼主
    这是截屏端:
    char* dot=new char[1024*768*24];//1024*768*2
    CBitmap bmp; //内存位图
    CDC wdc;//设备环境
    CDC* pDC;//指向桌面窗口的设备环境指针
    static CWindowDC ddc(CWnd::FromHandle(GetDesktopWindow()));
    //引用桌面窗口指针定义对象ddc
        pDC=&ddc;
        wdc.CreateCompatibleDC(pDC);//建立与ddc兼容的设备环境
        bmp.CreateCompatibleBitmap(pDC,1024,768);//建立与ddc兼容的位图
        wdc.SelectObject(&bmp);//选择bmp
        wdc.BitBlt(0,0,1024,768,pDC,0,0,SRCCOPY);

    if(bmp.GetBitmapBits(1024*768*24,dot)==0)
    AfxMessageBox("获取位图失败");
        videdata.vide=new unsigned char[1024*768*2];
    strcpy((char*)videdata.vide,(char*)dot);
      send(server,(char*)&videdata,sizeof(videdata),0);
    这是接收并显示端:
    其中recvdot存放接收的数据 是全局变量:
    CDC* pDC=GetDC();

    CDC wdc;
    CBitmap bmp;
    wdc.CreateCompatibleDC(pDC);
    //wdc.CreateCompatibleDC(&dc);
    bmp.CreateCompatibleBitmap(pDC,1024,768);
    //bmp.CreateCompatibleBitmap(&dc,1024,768);
    wdc.SelectObject(&bmp);

    CRect rect;
    GetClientRect(&rect);
    bmp.SetBitmapBits(1024*738*24,(LPVOID)recvdot);
    pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&wdc,
    0,0,1024,768,SRCCOPY);

    程序运行后能够正常发送和接收数据 但显示的是黑白的 


    问题点数:100 回复次数:0 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复 


    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-06-21 20:40:411楼 得分:0
    strcpy((char*)videdata.vide,(char*)dot);
    strcpy遇到0就不继续复制了,如果要复制数据应该用memcpy。不过这里复制数据是多余的,你可以直接发送dot中的数据,或者GetBitmapBits给videdata.vide。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-06-21 20:41:302楼 得分:0
    另外,1024*768*24也太大了,最多1024*768*4就够了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-21 21:03:383楼 得分:0
    你的接收和发头应该使用设备无关的API操作,否则如果两个不同颜色深度的设备,会显示不正常!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-22 14:53:204楼 得分:0
    谢谢CNDGS!
    我改正了 ,但是显示后还是一黑一白啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-06-22 15:11:115楼 得分:0
    你调试看看从执行到哪里开始数据不对的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 07:38:226楼 得分:0
    调试到“bmp.SetBitmapBits(1024*738*24,(LPVOID)recvdot);
    pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&wdc,
    0,0,1024,768,SRCCOPY); ”时 recvdot:expression cannot be evaluated
    该如何解决!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 08:50:147楼 得分:0
    关注 关注 关注 关注 关注 关注
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 13:48:458楼 得分:0
    send一次最大发送多少数据啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-06-23 14:29:279楼 得分:0
    1024*738*24太大了,如果你使用32位真彩色,把所有*24都改成*4。另外738是不是应该是768?
    send一次的数据量没有显示,根据返回值可以判断发送了多少,如果没有发完,应该循环继续发送后面的数据。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 13:41:3010楼 得分:0
    谈谈我的思路:屏幕传输,先将屏幕分块,然后判断每块的数据是否有变化,如果有变化将该块的数据截屏,再压缩-->传输 ->接收 ->解压 ->图象还原.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved