用directshow 实现抓图遇到的问题
来源:互联网 发布:仿淘宝网站模板 编辑:程序博客网 时间:2024/04/28 15:36
下面红色的一段是我按照Directshow开发指南敲下来的一个抓图函数
SnapshotBitmap( IBasicVideo * BasicVideo, const char * OutFile)
{
if( BasicVideo )
{
long BitmapSize = 0;
//首先获得图像大小
if( SUCCEEDED( BasicVideo->GetCurrentImage( &BitmapSize,0)))
{
BOOL PassImage = FALSE;
unsigned char * Buffer = new unsigned char[BitmapSize];
//获取图像帧数据
if( SUCCEEDED( BasicVideo->GetCurrentImage(&BitmapSize,(long *)Buffer)))
{
BITMAPFILEHEADER hdr;//Bitmap的头文件信息
LPBITMAPINFOHEADER lpbi;//Bitmap的文件信息(包括数据信息)
lpbi = ( LPBITMAPINFOHEADER ) Buffer;
int nColors = 1 << lpbi->biBitCount;
if(nColors > 256 )
nColors = 0;
hdr.bfType = ((WORD) ( 'M'<< 8 ) | 'B' );
hdr.bfSize = BitmapSize + sizeof( hdr );
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = (DWORD) ( sizeof( BITMAPFILEHEADER )+ lpbi->biSize + nColors * sizeof(RGBQUAD));
CFile BitmapFile( OutFile ,CFile::modeReadWrite | CFile::modeCreate | CFile::typeBinary );
//写入位图头文件
BitmapFile.Write( &hdr,sizeof( BITMAPFILEHEADER ));
//写入帧数据(包括BITMAPFILEHEADER 信息)
BitmapFile.Write( Buffer,BitmapSize );
BitmapFile.Close();
PassImage = TRUE;
}
delete [] Buffer;
}
}
}
以下的是我在程序中的响应抓图事件的处理函数
OnBnClickedSnapshotbitmap()
{
// TODO: 在此添加控件通知处理程序代码
if ( FilterGraph)
{
MediaControl->Pause();
// Firstly grab a bitmap to a temp file
char szTemp[] = "C://mysnapshot.bmp";
SnapshotBitmap( BasicVideo,szTemp );
// User can browser for a new file here
CString strFilter = "BMP File (*.bmp)|*.bmp|";
CFileDialog dlgOpen(FALSE, ".bmp", NULL, OFN_HIDEREADONLY, strFilter, NULL);
if (IDOK == dlgOpen.DoModal())
{
::CopyFile(szTemp, dlgOpen.GetPathName(), TRUE);
::DeleteFile(szTemp);
}
MediaControl->Run();
}
}
请问为什么会不可以正确的截图呢?
好像好多网上都是采用这个方法的!
这是我在CSDN发的第一篇,说得不太清楚 ,请大家谅解。
- 用directshow 实现抓图遇到的问题
- DirectShow实现抓图(Delphi)
- DirectShow 预览时抓数据的问题
- 使用DirectShow的BaseClasses遇到的问题
- DirectShow Filter 编译时遇到的问题
- DirectShow开发中遇到的问题
- wireshark抓包遇到的问题
- java抓mongodb数据遇到的问题
- 用VS2008编译DirectShow的BaseClasses遇到的问题及解决办法
- 编译DirectShow的SDK所遇到的问题及解决方法
- 【opencv + Directshow + VC2005】视频采集中遇到的问题
- directshow编译遇到的错误
- 用DirectShow实现音视频文件的播放
- 使用纯net技术实现抓屏(包含连续抓图和鼠标的问题的解决方法)
- 在directshow的filter里调用ffmpeg库遇到的几个头疼的问题
- 用mediaplay实现抓图
- 用mediaplay实现抓图
- DirectShow中用wm asf writer保存wmv文件遇到的媒体时间问题
- [翻译]quake3bsp
- 「机箱」TT Matrix矩阵(VD2000BNS)
- 博客开通
- 和上司沟通必备8个黄金句
- 字符,字节和编码
- 用directshow 实现抓图遇到的问题
- AJAX是什么
- 「机箱」Tt Bach巴赫机箱 (VB8001BNS黑/VB8001SNS银白)
- JMS消息详解
- 网页插入real播放器多文件可选择播放的代码 2006-6-9-1
- 如何实现象QQ那般隐藏的窗体
- 不能落后于时代--我的博客起点
- 「机箱」 Tt 海啸系列
- “说服自己+调整自己”、香港人与大陆人