使用视频采集卡,通过CCD摄像头采集图象,已经能正常显示,现需要实现通过鼠标拖动,在动态视频图象上画透明矩形,我的步骤如下:
1,以OnLButtonDown中光标点为起点;
2,在OnMouseMove中画矩形;
3,以OnLButtonUp中光标点为终点;现在可以画出矩形,但有两个问题:
1,矩形不透明,把视频图象覆盖了,怎么画透明矩形呢?
2,画新矩形时,老的矩形没有清除掉,怎么能在画新矩形时,清除之前矩形,并保证不闪烁??急需各位大哥大姐指点迷津,感激不尽,分不够我再给,谢谢谢谢啊!

解决方案 »

  1.   

    关于画透明矩形
    笨的方法是把矩形改成四条线LineTo画
    复杂点的方法是把背景和你的矩形画到内存DC中然後再BitBlt
      

  2.   

    画之前 setbkmodel( TRANSPARENT )画新矩形时,又要点左键不是,和你画第一个不是一样的,所以只要覆盖原来的数据就行了。
      

  3.   

    如果你的视频是Overlay的,只需要以Overlay的color key为背景色即可。
    如果不是Overlay的,可能在Render之前加一个Transform filter.
      

  4.   

    TO:miaoshengwu(孤单北半球)    我使用双缓冲的方式显示视频图象,图象是动态刷新的,画矩形就是直接在Dialog中画,你怎么画的呢??
    TO:DentistryDoctor    大哥说的我不是很懂,你说的Overlay是否是在图象上写字? 我现在是想实现用鼠标拖动,在动态图象上画矩形框,以表示选中该区域,您能否详细讲讲该怎么做??
      

  5.   

    没记错的话,加入如下代码即可: CRect  rect(0,0,500,500);   
     CRgn   rgn;   
     rgn.CreateRectRgnIndirect(&rect);   
     pDC->SelectClipRgn(&rgn);   
        
     pDC->Rectangle(ptStart.x, ptStart.y, ptEnd.x, ptEnd.y); rgn.DeleteObject();上面的代码可将画图范围限定在500*500的矩形范围内
      

  6.   

    我用的方法是developCpp(宝宝取个甚么名字好呢) 所说的那种,
    在OnPaint()里画的。
      

  7.   

    其实不管是画线,还是画矩形我都会,可问题是有了视频图象以后,简单的在OnPaint中画就达不到效果了,会被视频覆盖。我已解决上面的问题,是使用异或绘图,但问题又来了,自己在OnMouseMove里绘图的话,那么当窗口被覆盖或者切换时,这些画的线就被擦掉了,如何能让他们一直保持在界面上呢??
      

  8.   

    在画线时将线保存下来,在ontraw中重绘,见
    http://community.csdn.net/Expert/topic/5486/5486194.xml?temp=.1242487
    我的最后第二次回答