在一个采集卡采集图像处理中,需要对采集到的视频做实时处理。用C#来调用C++的DLL,在DLL中,有一个用来获取一张图片到内存和获取图像格式头信息的3个函数:函数1:获取图像格式头信息LONG APIENTRY devwdm_GetBmpInfo(void *bmHdr);
函数2:获取采集一帧RGB24图像到内存LONG APIENTRY devwdm_GetImageBuffer(BYTE *pImageMem);
函数3:采集一帧YUY2图像数据到内存LONG APIENTRY devwdm_CopyImageYUVMem(BYTE *pMem);
我在C#中是这样调用的:        [DllImport("devwdm.dll")]
        //函数功能:采集一帧RGB24图像到内存   pImageMem:图像缓冲区指针
        public static extern int devwdm_GetImageBuffer(IntPtr pImageMem);        [DllImport("devwdm.dll")]
        //函数功能:      采集一帧YUY2图像数据到内存
        //pMem:          图像缓冲区指针
        public static extern int devwdm_CopyImageYUVMem(IntPtr pMen);        [DllImport("devwdm.dll")]
        // //函数功能:获取图像格式头信息   bmHdr:图像格式头指针    
        public static extern int devwdm_GetBmpInfo(IntPtr bmHdr);问题是,如何用C#来对视频进行实时处理呀?从内存中读取图像吗?这样的话怎么处理?需要每秒采集几幅图像然后对其处理之后再动态显示出来,然后释放掉内存吗?我是菜鸟,实在不懂啊,还希望高手们不吝赐教,感激不尽啊!!!
在线等!!!

解决方案 »

  1.   

    应该有直接显示视频的函数或提供了com控件
      

  2.   

    你只能通过显示视频的函数来实现视频的实施显示。
    通过图片虽然也可以,但是效果估计比较差。
    你实在想做,提供2个思路:
    1.知道视频的帧数/秒,然后用时钟循环,每秒抓取这么多的图像,并且每抓一张就把图像画到一个画布上。例如picturebox就行。当然,画图的技术要过关,使用GDI+不行的话,就是用DirectShow处理。就是你现在要实现的思路。
    2.在实时视频上查看,当需要抓图的时候,调用抓图接口,抓取图片。
      

  3.   

    回复3楼:估计是您误解我的意思了,API中有显示视频的函数,我是想对其视频做实时处理,然后对处理之后的进行显示......
      

  4.   

    设置好参数之后报错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。经人指点,说C++中的byte*,在C#中应转化为byte[],但是还是报该错误
      

  5.   

    http://topic.csdn.net/u/20101215/21/b39acb15-6587-4086-9020-1d00ef38c72f.html?52518你可以先试试用C++来处理这个问题,流程确认清楚后再用C#
      

  6.   

    我想要devwdm.DLL,楼主能不能给我?[email protected]