我在做一个视频通讯的程序 从远端的摄像头(有采集卡)采集的帧(位图) ,用CxImage压缩为JPEG 然后通过网络传输 到本地,然后本地通过Cximage将接收到的转换为Bitmap,然后想在本地的对话框上显示 ,我用的是CStatic的SetBitmap(..) 来显示的。请问这样合理吗?能显示的流畅吗?      由于是在局域网中 ,我在程序中用TCP传输的视频数据。但是不知道为什么传输了 大概一分钟的时间之后 对话框的CStatic就定在那儿 而远程有摄像头的那台机器的图像仍然在继续传输。 我不知道是怎么回事? 请大家帮我想想啊。

解决方案 »

  1.   

    此外 是不是有其他更合理的方法来显示一直接收到的JPEG视频流啊 ?
      

  2.   

    HBITMAP SetBitmap( HBITMAP hBitmap ); 这个函数会返回 原来的位图,你不断创建新的位图,然后设置进去, 时间长了, 内存都漏完了...象你这样的方式也没什么不行,就是注意将返回的 位图 删除掉
      

  3.   

    请问您说的将“ 将返回的 位图 删除掉 ”怎么做啊?是不是就是 HBITMAP hOld=SetBitmap( hNew); 
     CloseHandle(hOld);
      

  4.   

    你说的 “最好的办法是直接对视频流进行压缩传输”。我就是感觉比较难  不知道怎么做 所有就选择了上面的(BMP->JPEG->BMP) 的方法来做的。关于 “最好的办法是直接对视频流进行压缩传输”到底是不是该怎么学啊?
      

  5.   

    DeleteObject(hOld);
    =======谢谢啊。为什么不用CloseHandle啊?
    另外为什么我不断的SetBitmap(。。) ,旧的bitmap难道一直保留吗?不会自动被覆盖掉吗?
      

  6.   

    实际上通过CxImage的接口,你重载CStatic可以使程序代码结构更加合理一些
      

  7.   

    To qrlvls(空 气) :  您说的 我不理解。能不能说的清楚点啊? 谢谢啊
      

  8.   

    我在收到一帧图片数据后(一张jpeg图) 就是直接创建了一个CxImage对象 将内存块作为构造函数的参数 然后通过
    CxImage image(.....);
    HBITMAP m_bitmap = NULL;
    ...
    if (m_bitmap) DeleteObject(m_bitmap);
    m_bitmap = image.MakeBitmap(m_StaticPicture.GetDC()->m_hDC);
    m_StaticPicture.SetBitmap(m_bitmap);
      

  9.   

    实际上通过CxImage的接口,你重载CStatic可以使程序代码结构更加合理一些
    ==========如何重载啊?
      

  10.   

    资源耗尽的 问题啊 ! 需要 DeleteObject(hOld);
      

  11.   

    忘了结贴了 的确问题就是上面的说的 资源耗尽的 问题 。用DeleteObject解决问题了。