首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VFW视频开发,该怎么解决

2014-01-17 
VFW视频开发想做个实时视频开发,用VFW做,遇到了点困难,有哪位大侠会的交流下啊。问题如:如何获得图像的文件

VFW视频开发
想做个实时视频开发,用VFW做,遇到了点困难,有哪位大侠会的交流下啊。

问题如:

  如何获得图像的文件头?

[解决办法]
其实我也不懂,总觉得回调函数啊自己派生的类什么的很麻烦,如果涉及线程什么的有些会不支持吧,于是回调就会出问题,帮你搜了下,涉及回调函数的
原地址
http://www.10moons.com/bbs/dispbbs.asp?boardid=19&replyid=81376&id=31190&page=41&skin=0&Star=2
sdk3000回调函数采集的图像yuy2如何转换为rgb24 
/原始流回调函数. 使用CaptureFileAsBmp使用完成yuv2-rgb,可选择存储文件
void CALLBACK PrcCapSourceStreamCallBack( long lnCardID, long pBuf, long lnWidth, long lnHeight, long lnBiCount )
{
    TRACE("CallBack\n");
    DT("CallBack");
    if(!g_bSnap)
        return;
    g_bSnap = FALSE;

    BYTE *pRGB24Buffer = new BYTE[lnWidth*lnHeight*3];
    BYTE *pYUVBuffer = new BYTE[lnWidth*lnHeight*lnBiCount];

    //要进行倒置
    for(int i = 0; i < lnHeight; i++)
    {
        memcpy(pYUVBuffer + i * lnWidth * lnBiCount,
            (BYTE*)pBuf + (lnHeight - i - 1) * lnWidth * lnBiCount,lnWidth * lnBiCount);
    }

    //该函数在传文件名为空时仅仅将YUY2数据转为RGB24数据在pRGB24Buffer中输出。
    CaptureFileAsBmp("c:\\aa.bmp",pYUVBuffer,pRGB24Buffer,lnWidth,lnHeight);

    delete []pYUVBuffer;
    delete []pRGB24Buffer;

将回调到的RGB数据写一个BMP的文件头存储为BMP
void CALLBACK VCPrcPicMessage( long lnCardID, long pBuf, long lnWidth, long lnHeight)
{
    HANDLE hf;                 // file handle 
    BITMAPFILEHEADER hdr;       // bitmap file-header 
    BITMAPINFOHEADER * pHeader;     // bitmap info-header 
    DWORD dwTmp; 

    pHeader                        = (BITMAPINFOHEADER *) pBuf;
    pHeader->biSize                = sizeof(BITMAPINFOHEADER);
    pHeader->biBitCount            = 24;
    pHeader->biWidth            = lnWidth;
    pHeader->biHeight            = lnHeight;
    pHeader->biPlanes            = 1;
    pHeader->biCompression        = BI_RGB;
    pHeader->biSizeImage        = lnWidth * lnWidth * 3;
    pHeader->biXPelsPerMeter    = 0;
    pHeader->biYPelsPerMeter    = 0;
    pHeader->biClrUsed            = 0;
    pHeader->biClrImportant        = 0;

    // Create the .BMP file. 
    hf = CreateFile("c:\\1.bmp", 
                   GENERIC_READ 
[解决办法]
 GENERIC_WRITE, 
                   (DWORD) 0, 
                   NULL, 
                   CREATE_ALWAYS, 
                   FILE_ATTRIBUTE_NORMAL, 


                   (HANDLE) NULL); 
    if (hf == INVALID_HANDLE_VALUE) 
        return;
    hdr.bfType = 0x4d42;        // 0x42 = "B" 0x4d = "M" 
    // Compute the size of the entire file. 
    hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + 
                 pHeader->biSize + pHeader->biClrUsed 
                 * sizeof(RGBQUAD) + pHeader->biSizeImage); 
    hdr.bfReserved1 = 0; 
    hdr.bfReserved2 = 0; 

    // Compute the offset to the array of color indices. 
    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + 
                    pHeader->biSize + pHeader->biClrUsed 
                    * sizeof (RGBQUAD); 

    // Copy the BITMAPFILEHEADER into the .BMP file. 
    if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER), 
        (LPDWORD) &dwTmp,  NULL)) 
    {
       return;
    }

/*
    // Copy the BITMAPINFOHEADER and RGBQUAD array into the file. 
    if (!WriteFile(hf, (LPVOID) pHeader, sizeof(BITMAPINFOHEADER) 
                  + pHeader->biClrUsed * sizeof (RGBQUAD), 
                  (LPDWORD) &dwTmp, NULL))
        return; 
*/
    // Copy the array of color indices into the .BMP file. 
    if(!WriteFile(hf, (void*)pBuf, pHeader->biSizeImage, (LPDWORD) &dwTmp,NULL))
        return; 

    // Close the .BMP file. 
     if (!CloseHandle(hf)) 
           return;
     

}


热点排行