在BasicWindow中有个GetCurrentImage方法,可以很好的完成抓拍功能。但有以下两点要注意: 1、在建立filter graph时,我们renderer某个源时,系统默认采用video renderer,此时如果调用GetCurrentImage方法,并不可靠,有时甚至根本不能抓拍到;解决此问题可以采用“DirectShow实务精选”中的提供的抓拍Filter来实现抓拍;但看过那篇文章的人都知道比较复杂,其实有个比较简单的方法,就是直接用Video Mix Renderer9代替Video Renderer:在renderer之前,把VMR9调到filter graph中即可。 2、另外,通常提供的例程会是这样的: BOOL CDXGraph::GetCurrentImage(const char * inFile) int nColors = 1 << lpbi->biBitCount; CFile bmpFile(inFile, CFile::modeReadWrite | CFile::modeCreate | CFile::typeBinary); 但有时(甚至是多数时候,呵呵),抓拍下来的图并不是在各种图像处理过程中都能正常显示(如:不能生成缩略图,在photoshop中不能打开),其实也就是在写Bmp文件头时对图像位数处理不对引起的: 注意到变量nColors会直接影响到数据指示的起始位置,事实上GutCurrentImage并不支持带调色板的位图,所以可以改成这样: 原: int nColors = 1 << lpbi->biBitCount; 现: int nColors=0; |
|
来自: BeautymengRoom > 《wince6.0》