PhotoShop?とDirectorを使う授業を取っていたときに、 自分の体の動きを取り込む必要があったので、 折角だからLogitechのQV4000を買ってしまいました。
ただ使うだけではおもしろくないので、自作ソフトで 取り込めるようにしてみました。
今回使用したUSBカメラは、Linuxでも使用できます (だから、こんなに高いのを買ったのですが・・・。 ちなみに、LogitechのUSBカメラは大抵Linuxでも使えるみたいです)。~ 機会があれば、Linux版のプログラムもチャレンジしてみたいですね。
QV4000付属のドライバをインストールしておいてください。 また、付属のツールを使って、カメラが確実に動作することを確認しておいてください。
//--------------------------------------------------------------------------- // USBカメラで動画取り込み //--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #pragma hdrstop #include <vfw.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HWND hWndCap; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- //チェックボックスのチェックが切り替わったとき void __fastcall TForm1::CheckBox1Click(TObject *Sender) { if(CheckBox1->Checked){ //チェックが入ったとき hWndCap = capCreateCaptureWindow( "Captrue Window",//キャプチャウィンドウの名前 WS_CHILD | WS_VISIBLE,//ウィンドウスタイル 1 , 1,//表示位置 320, 240,//ウィンドウサイズ Panel1->Handle,//親のハンドル NULL);//よくわかりません capDriverConnect( hWndCap, 0 );//チャンネル1に接続 //capOverlay( hWndCap, TRUE );//オーバーレイモードで動作 capPreviewRate( hWndCap, 1 );//プレビューレートの設定 capPreview( hWndCap, TRUE );//プレビューモードで動作 }els e{ capDriverDisconnect(hWndCap);//ドライバの解放 } } //---------------------------------------------------------------------------
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE 管理のコンポーネント TPanel *Panel1; T CheckBox *CheckBox1; void __fastcall CheckBox1Click(TObject *Sender); private: // ユーザー宣言 public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
object Form1: TForm1 Left = 211 Top = 117 BorderStyle = bsDialog Caption = 'Form1' ClientHeight = 281 ClientWidth = 330 Color = clBtnFace Font.Charset = SHIFTJIS_CHARSET Font.Color = clWindowText Font.Height = -12 Font.Name = 'MS Pゴシック' Font.Style = [] OldCreateOrder = False Position = poScreenCenter PixelsPerInch = 96 TextHeight = 12 object Button1: TButton Left = 4 Top = 4 Width = 75 Height = 25 Caption = '&Capture' Enabled = False TabOrder = 0 OnClick = Button1Click end object Panel1: TPanel Left = 4 Top = 36 Width = 322 Height = 242 BevelOuter = bvLowered Caption = 'Panel1' TabOrder = 1 end object Button2: TButton Left = 88 Top = 4 Width = 75 Height = 25 Caption = 'Streaming' Enabled = False TabOrder = 2 OnClick = Button2Click end object CheckBox1: TCheckBox Left = 172 Top = 8 Width = 97 Height = 17 Caption = 'Streaming2' TabOrder = 3 OnClick = CheckBox1Click end end
カメラ関係の処理を行う場合は、必ず"vfw.h"(Video for Windows)をインクルードしておいてください。
チェックボックスのOn / Offで、取り込み・停止が切り替えられます。
チェックが入ると、キャプチャした画像を表示するウィンドウハンドルを指定(今回は、TPanel)し、 カメラと接続して画像の取り込みを開始、それぞれの取り込みモードを指定します。
チェックがはずれると、カメラとの接続を切断します。
Prog/BCB/USBカメラで動画像取り込み2
複数台のカメラから取り込む取り込む場合の例です。