zoukankan      html  css  js  c++  java
  • DirectShow自带实例StillCap在回调函数里实现抓图并保存为文件

        STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize )
        {
            // this flag will get set to true in order to take a picture
            //
            CBitmap bm;
            bm.CreateBitmap(640, 480, 1, 24, pBuffer);

            BITMAPFILEHEADER    BMFileHeader;  
            BITMAPINFOHEADER    BMInfoHeader;  
            BITMAP                BM;  
            bm.GetObject(sizeof(BM),&BM);    
            BMInfoHeader.biSize                =   sizeof(BITMAPINFOHEADER);  
            BMInfoHeader.biWidth            =   BM.bmWidth;  
            BMInfoHeader.biHeight            =   BM.bmHeight;  
            BMInfoHeader.biPlanes            =   1;  
            BMInfoHeader.biBitCount            =   24;  
            BMInfoHeader.biCompression        =   0;  
            BMInfoHeader.biSizeImage        =   0;  
            BMInfoHeader.biXPelsPerMeter    =   0;  
            BMInfoHeader.biYPelsPerMeter    =   0;  
            BMInfoHeader.biClrUsed            =   0;  
            BMInfoHeader.biClrImportant        =   0;  

            BMFileHeader.bfType        =0x4d42;  
            BMFileHeader.bfOffBits    = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);  
            BMFileHeader.bfSize        =BMFileHeader.bfOffBits + BM.bmWidth * BM.bmHeight * 3;  
            BMFileHeader.bfReserved1=0;  
            BMFileHeader.bfReserved2=0;  

            CFile   file;  
            if(!file.Open(_T("d:\\aa.bmp"),CFile::modeCreate|CFile::modeWrite))  
            {  
                return 0;  
            }  
            file.Write(&BMFileHeader, sizeof(BITMAPFILEHEADER));  
            file.Write(&BMInfoHeader, sizeof(BITMAPINFOHEADER));  
            file.Write(pBuffer, BM.bmWidth * BM.bmHeight * 3);  
            file.Close();  

            bm.DeleteObject();
  • 相关阅读:
    css--display详解
    关于overflow:hidden的作用
    float 应用
    flex 布局
    CSS+DIV布局中absolute和relative的区别
    线程和进程的区别是什么?
    .NET中读写SQL Server数据库需要用到哪些类?作用是什么?
    C# CookieHelper
    git pull/push代码 每次都要输入账户名和密码的解决方法
    git拉取远程分支到本地
  • 原文地址:https://www.cnblogs.com/cplusplus/p/2452953.html
Copyright © 2011-2022 走看看