想把一个视频文件的画面分成两个部分,分别在两个窗口里播放,这个能实现吗?请指教,谢谢。

解决方案 »

  1.   

    可以的,使用OPENGL抓取每帧图像做纹理,然后再把每帧纹理贴出来。在贴出纹理的时候可以控制纹理坐标,显示一部分。类似于这样的
    ==========================
    glBegin(GL_QUADS );
    glTexCoord2f(1.0f*partPercent,1.0f); glVertex3f(0.0f,8.0f,-20.0f);
    glTexCoord2f(0.0f,1.0f); glVertex3f(-20.0f,8.0f,-20.0f);
    glTexCoord2f(0.0f,0.0f); glVertex3f(-20.0f,-8.0f,-20.0f);
    glTexCoord2f(1.0f*partPercent,0.0f); glVertex3f(0.0f,-8.0f,-20.0f);
    glEnd();glBegin(GL_QUADS );
    glTexCoord2f(1.0f,1.0f); glVertex3f(20.0f,8.0f,-20.0f);
    glTexCoord2f(1.0f*partPercent,1.0f); glVertex3f(0.0f,8.0f,-20.0f);
    glTexCoord2f(1.0f*partPercent,0.0f); glVertex3f(0.0f,-8.0f,-20.0f);
    glTexCoord2f(1.0f,0.0f); glVertex3f(20.0f,-8.0f,-20.0f);
    glEnd();
      

  2.   

    具体方法是重载两个函数:OnLButtonDown   和OnMouseMove   
        
      //   重载后不允许调整大小   
      void   CMySplitterWnd::OnLButtonDown(UINT,   CPoint)   
      {   
      return;   //就这么简单   
      }   
        
      //   重载后不允许设置光标指针   
      void   CMySplitterWnd::OnMouseMove(UINT,   CPoint)   
      {   
      return;   //   同上   
      }   
      直接return,其它什么也不做。通常当在切分条上点击鼠标时,MFC执行的是如下代码:   
        
      //   (在   WinSplit.cpp   中)   
      void   CSplitterWnd::OnLButtonDown(UINT,   CPoint   pt)   
      {   
      if   (m_bTracking)   
      return;   
      StartTracking(HitTest(pt));   
      }
      

  3.   

    DirectShow应该可以实现
                             
    SourceFilter --> splitter filter   ---> Stream 1
      

  4.   

    不好意思,按错Enter了Graph:
                             
    SourceFilter --> splitter filter   ---> Stream 1 -->Renderer  (显示需要的部分)
                                       --> Stream 2 -->Renderer (显示需要的部分)
      

  5.   

    可以,网上有例子,自已google下吧.