vc中DirectShow捕捉的图片怎样保存为BMP文件?

来源:百度知道 编辑:UC知道 时间:2024/05/05 02:55:50
vc中DirectShow捕捉的图片怎样保存为BMP文件?

有知道的, 请发到我的邮箱中! Juncox@163.com

我已经解决, 但是抓图时, 有延时或拉动现象.

感谢大家在此的回答!

新建一个文件,按先后顺序写3个部分:BITMAPFILEHEADER,BITMAPINFOHEADER,位图数据(这就是从Sample Grabber里直接得到的那个buffer)。

DirectShow我没研究过,你看看这个对你有帮助没,hBitmap里保存的就是你想要保存为bmp的图像信息,lpFileName是想要保存到哪个目录下面,hWndDC把你的DC传进来或传个NULL进来就行

BOOL SaveBitmapToFile(HBITMAP hBitmap,LPCTSTR lpFileName,HDC hWndDC)
{
HDC hDC; //设备描述表
int iBits; //当前显示分辨率下每个像素所占字节数
WORD wBitCount; //位图中每个像素所占字节数
DWORD dwPaletteSize=0, //定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数
dwBmBitsSize,
dwDIBSize, dwWritten;
BITMAP Bitmap; //位图属性结构
BITMAPFILEHEADER bmfHdr; //位图文件头结构
BITMAPINFOHEADER bi; //位图信息头结构
LPBITMAPINFOHEADER lpbi; //指向位图信息头结构

HANDLE fh, hDib, hPal,hOldPal=NULL; //定义文件,分配内存句柄,调色板句柄

//计算位图文件每个像素所占字节数
//hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
hDC=::CreateCompatibleDC(hWndDC);
iBits=GetDeviceCaps(hDC,BITSPIXEL)*GetDeviceCaps(hDC,PLANES);
DeleteDC(hDC);