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

VFW视频开发,该怎么处理

2012-06-03 
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;


}


热点排行