关闭

用directshow 实现抓图遇到的问题

1353人阅读 评论(0) 收藏 举报

下面红色的一段是我按照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发的第一篇,说得不太清楚 ,请大家谅解。

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1781次
    • 积分:25
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档