USB摄像头的图像采集!!

flyingakain 2005-05-31 09:54:56
找来一段代码,可是不会把数据画出来,高手指点一下!!
ICreateDevEnum *pDevEnum;
IMediaControl *pMC;
IGraphBuilder *pGraph;
IBaseFilter *pF;
ISampleGrabber *pGrab;
ICaptureGraphBuilder2 *pCapture;
BOOL initVideo(void) ;
void initGraphic(void) ;
void closeVideo(void);
struct img{
BITMAPINFOHEADER bih;
BYTE *lpBmpData;
HINSTANCE hi;
};//
img img00,img01;
BOOL initVideo(void)

{
AM_MEDIA_TYPE amt;
CoInitialize(NULL); // COM的初期化

// ---- 输入计算的准备 ----

// 搜索输入装置

IBaseFilter *pbf = NULL;

IMoniker * pMoniker = NULL;

ULONG cFetched;

// 制作装置的各个部分

CoCreateInstance( CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC,
IID_ICreateDevEnum, (void ** ) &pDevEnum);

// 制作视频输入装置的各个部分

IEnumMoniker * pClassEnum = NULL;

pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0);

if (pClassEnum == NULL){

AfxMessageBox("No video device, program exit!");

pDevEnum->Release();

CoUninitialize();

//OnOK();

return FALSE ;

}

// 取得最初发现的视频输入装置object的接口

pClassEnum->Next(1, &pMoniker, &cFetched);

pMoniker->BindToObject( 0, 0, IID_IBaseFilter, (void**)&pbf );



// ---- 过虑图像的准备 ----

// 制作过虑图像,取得接口

CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder, (void **) &pGraph);
pGraph->QueryInterface( IID_IMediaControl, (LPVOID *) &pMC );

// 把输入图像追加到过虑图像
pGraph->AddFilter( pbf, L"Video Capture");

// 因为进行了追加所以解除参照的输入图像

pbf->Release();

// ---- 过虑图像的准备 ----

// 制作过虑图像,取得接口

CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (LPVOID *)&pF);

pF->QueryInterface( IID_ISampleGrabber, (void **)&pGrab );

// 把输入图像追加到过虑图像

ZeroMemory(&amt, sizeof(AM_MEDIA_TYPE));

amt.majortype = MEDIATYPE_Video;

amt.subtype = MEDIASUBTYPE_RGB24;

amt.formattype = FORMAT_VideoInfo;

pGrab->SetMediaType( &amt );

// 把grubber过虑追加到过虑图像

pGraph->AddFilter(pF, L"SamGra");

// ---- 输入图像的准备 ----

// 制作输入图像

CoCreateInstance( CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void **) &pCapture );

// 把过虑图像编入到输入图像

pCapture->SetFiltergraph( pGraph );

// 输入图像的设定,设定grubber为rendering输出

pCapture->RenderStream (&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,

pbf, NULL, pF);



// ---- 表示窗口的准备 ----

// 位图信息的取得

pGrab->GetConnectedMediaType( &amt );

// 获得视频头部的信息

VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;

// 在视频的头部包含位图的信息

// 把位图的信息复制到BITMAPINFO的结构体中

BITMAPINFO BitmapInfo;

ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );

CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader),

sizeof(BITMAPINFOHEADER));

img00.bih = BitmapInfo.bmiHeader;

long n = img00.bih.biSizeImage;



char s[100];

sprintf(s, "Video Width: %ld Video Height: %ld", img00.bih.biWidth, img00.bih.biHeight);

AfxMessageBox(s);



img00.lpBmpData = (BYTE *)malloc( n );



// ************* 追加 *****************

if (img00.lpBmpData == NULL) {

AfxMessageBox("Insufficient Memory!");

}



img00.hi = (HINSTANCE)GetWindowLong( HWND_DESKTOP, GWL_HINSTANCE );

return true;

}

void initGraphic(void)

{

// 把位图的信息复制到BITMAPINFO的结构体中

BITMAPINFO BitmapInfo;

ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );

CopyMemory( &BitmapInfo.bmiHeader, &img00.bih,

sizeof(BITMAPINFOHEADER));

img01.bih = BitmapInfo.bmiHeader;

long n = img01.bih.biSizeImage;

img01.lpBmpData = (BYTE *)malloc( n );



// **************** 追加 ******************

if (img01.lpBmpData == NULL) {

printf("Insufficient memory available (img01.lpBmpData)\n");

}

img01.hi = (HINSTANCE)GetWindowLong( HWND_DESKTOP, GWL_HINSTANCE );

}

void closeVideo(void)

{

// 接口的解除

pMC->Release();

pDevEnum->Release();

pGraph->Release();

pCapture->Release();



CoUninitialize();

free( img00.lpBmpData );

}
...全文
340 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingakain 2005-06-06
  • 打赏
  • 举报
回复
我只是想知道,怎么才能画出上边的代码所采集的数据
flyingakain 2005-06-02
  • 打赏
  • 举报
回复
up
qrlvls 2005-06-01
  • 打赏
  • 举报
回复
http://www.codeproject.com/audio/avicapwrp.asp
http://www.coding-board.de/board/showthread.php?t=11072
flyingakain 2005-05-31
  • 打赏
  • 举报
回复
原作者也就提供了这一点而已
我试过了,完全能用,就是不知道怎么调入已经在采集的图像
xiaofei1225 2005-05-31
  • 打赏
  • 举报
回复
好东西,如果能提供源码就好了
zxyjyzxyjy 2005-05-31
  • 打赏
  • 举报
回复
up

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧