今回はVFW(Video For Windows)によるウェブカメラキャプチャを行ってみます
当たり前ですがウェブカメラがないと動きません
個人的にはLogicool製が良いと思います
VFWを使うとキャプチャー以外にもAVIなどの動画処理を行うことができます
動画像処理に興味がある人は試してみるといいでしょう

	#include <tchar.h>
	#include <windows.h>
	#include <vfw.h>
	#pragma comment(lib,"vfw32.lib")
 
	// ウィンドウプロシージャ
	LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
	{
		if(msg == WM_DESTROY) PostQuitMessage(0);
		return (DefWindowProc(hWnd, msg, wParam, lParam));
	}
 
	// キャプチャーコールバック関数
	LRESULT CALLBACK capVideoStreamCallback(HWND hWnd,LPVIDEOHDR lpVHdr){
 
		// エンターキーでスナップショット
		if(GetAsyncKeyState(VK_RETURN))
			capFileSaveDIB(hWnd,"capture.bmp");
 
		// キャプチャー画像ピクセルデータ
		//lpVHdr->lpData
		return TRUE;
	}
 
	int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
	{
		const TCHAR* WC_BASIC = _T("Basic"); // ウィンドウクラス名
 
		/********************************************/
		/* ウィンドウクラスの定義と登録 */
		/********************************************/
 
		// シンプルウィンドウクラス設定
		WNDCLASSEX wcex ={sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, WndProc, 0,0,hInstance,
			(HICON)LoadImage(NULL,MAKEINTRESOURCE(IDI_APPLICATION),IMAGE_ICON,0,0,LR_DEFAULTSIZE | LR_SHARED),
			(HCURSOR)LoadImage(NULL,MAKEINTRESOURCE(IDC_ARROW),IMAGE_CURSOR,0,0,LR_DEFAULTSIZE | LR_SHARED),
			(HBRUSH)GetStockObject(WHITE_BRUSH), NULL, WC_BASIC , NULL};
 
		// シンプルウィンドウクラス登録
		RegisterClassEx(&wcex);
 
		/********************************************/
		/* ウィンドウの作成 */
		/********************************************/
 
		HWND hWnd = CreateWindowEx(
			0, //拡張ウィンドウスタイル
			WC_BASIC, //ウィンドウクラス名
			_T("タイトル"), //タイトルバーにこの名前が表示されます
			WS_OVERLAPPEDWINDOW | WS_VISIBLE, //ウィンドウスタイル
			CW_USEDEFAULT, //X座標
			CW_USEDEFAULT, //Y座標
			640, //幅
			480, //高さ
			NULL, //親ウィンドウのハンドル、親を作るときはNULL
			NULL, //メニューハンドルorリソースID
			hInstance, //インスタンスハンドル
			NULL); 
 
		// キャプチャーウィンドウ
		HWND hWndCap = capCreateCaptureWindow(
			_T("Captrue Window"),				//	キャプチャウィンドウの名前
			WS_CHILD | WS_VISIBLE,				//	ウィンドウスタイル このパラメータについてはここを見てください。
			0, 0,								//	表示位置
			320, 240,							//	ウィンドウサイズ
			hWnd,								//	親のハンドル
			NULL);                
		capDriverConnect( hWndCap, 0 ); //	チャンネル1に接続
		capPreviewRate( hWndCap, 1 );   //	プレビューレートの設定 数字が小さいほど速くキャプチャーします。
		capPreview( hWndCap, TRUE );    //	プレビューモード
 
		// ビデオフォーマット取得
		BITMAPINFO bmpinfo;
		capGetVideoFormat(hWndCap,&bmpinfo,sizeof(BITMAPINFO));
 
		// キャプチャーするたびに呼ばれる関数登録
		capSetCallbackOnFrame(hWndCap,capVideoStreamCallback);
 
		MSG msg={0};
		while (GetMessage(&msg,0,0,0)) DispatchMessage(&msg); 
 		
		capDriverDisconnect (hWndCap); 
 
		return 0;
	}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS