ビデオキャプチャプログラミングについて

このQ&Aのポイント
  • ビデオキャプチャプログラミングについての疑問についてまとめました。
  • BorlandC++6.0を使用してビデオキャプチャプログラムを作成していますが、ストリーム再生がうまくできません。
  • capOverlay関数を使用してデータの上書きを行いたいのですが、うまくいきません。どこを修正すれば良いでしょうか?
回答を見る
  • ベストアンサー

ビデオキャプチャプログラミングについて

現在、思考錯誤しながら作っているプログラミングは以下の通りです。 #include <vcl.h> #pragma hdrstop #include <windows.h> #include <vfw.h> #include "Unit1.h" //----------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HWND hwnd; //---------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { hwnd = capCreateCaptureWindow( NULL, WS_CHILD | WS_VISIBLE, 0, 0, 960, 720, this->Handle,100 ); // キャプチャウィンドウの作成 SendMessage(hwnd,WM_CAP_DRIVER_CONNECT,0,0L); // キャプチャドライバに接続 capDriverGetCaps(hWndC, &CapDrvCaps, sizeof (CAPDRIVERCAPS)); if (CapDrvCaps.fHasOverlay) capOverlay(hwnd,TRUE); } のプログラムでビデオキャプチャしたいと思っています。 現段階では、静止画は表示できるのですが、ストリーム再生(カメラからの映像垂れ流し)が実行できません。 capOverlayではデータの上書きができるのではないかと思うのですが、うまくいきません。 このプログラムのどこを直せば、うまく実行できるのでしょうか? 開発ツールはBorlandC++6.0です。 よろしくお願いします。

noname#47454
noname#47454

質問者が選んだベストアンサー

  • ベストアンサー
  • HogePiyo
  • ベストアンサー率57% (24/42)
回答No.2

↓ここも参考になりそうですね。 http://laputa.cs.shinshu-u.ac.jp/~gtakano/prog.html

参考URL:
http://laputa.cs.shinshu-u.ac.jp/~gtakano/prog.html
noname#47454
質問者

お礼

ありがとうございます!!! このサイトを見ながらもう少し考えてみますね(^^)

その他の回答 (1)

  • HogePiyo
  • ベストアンサー率57% (24/42)
回答No.1

↓ひょっとしたらこのログが参考になるかもしれません。 http://n76cd-01p05.ppp11.odn.ad.jp/old/a8225.html 00.10.08.17.04 daigo さんの投稿です。

参考URL:
http://n76cd-01p05.ppp11.odn.ad.jp/old/a8225.html

関連するQ&A

  • ビデオキャプチャ

    どうしても、うまくいきません・・・ 以下のプログラムで、BorlandC++ Builder6.0のpanel1にカメラから取得した映像をストリーム再生したいのですが・・・。 コンパイルエラーとして、->か->*の左には構造体のポインタが必要、と出ます。 どうやったらこのエラーを解決し、ストリーム再生できるようになるでしょうか? アドバイスお願いします!!! #include <vcl.h> #pragma hdrstop #include <windows.h> #include <vfw.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HWND hwnd; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { // キャプチャドライバに接続 SendMessage(hwnd,WM_CAP_DRIVER_CONNECT,0,0L); CAPDRIVERCAPS CapDrvCaps; capDriverGetCaps(hwnd, &CapDrvCaps, sizeof (CAPDRIVERCAPS)); if (CapDrvCaps.fHasOverlay) capOverlay( hwnd->Panel1, TRUE ); // オーバーレイモードで動作 //ShowWindowAsync( hWndCap, SW_SHOW ); capDriverDisconnect( hwnd ); // ドライバの解放 //::DestroyWindow( hwnd ); // ウィンドウの破棄 }

  • TCP、UDPソケット

    あるC++言語の教科書に、TCPやUDPのクアリアントプログラム例が書いてありました。この例では、最初に、sock=0となっており、一つの接続しかできません。 複数の接続を行う場合、例えば、どのようにすると、良いのか御教授をお願いいたします。 #pragma comment(lib, "wsock32.lib") // #include <winsock.h> // #include "Main.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" TMainForm *MainForm; //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { sock = 0 ; } //---------------------------------------------------------------------------

  • AVIファイルを読み込む方法

    C++でプログラミング中の者です。 使っているコンポーネントはanimate、MediaPlayer、Edit、Botton、OpenDialogです。 OpenDialogで選択したファイル名をEditに表示させ、Mediaplayerを使ってAnimateに表示させるプログラミングをしたいと思っています。 なかなかうまくいかないので、アドバイスお願いいたします。 次のは現在のプログラムです。 #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //OpenDialog1->DefaultExt = "AVI"; //OpenDialog1->FileName = "*.avi"; if(OpenDialog1->Execute()==true){ // ファイル名が選択されたときに実行する処理  Edit1->Text=OpenDialog1->FileName; //Edit1に選択したファイル名を表示 //Animate1->Active=LoadFromFile(OpenDialog1->FileName); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { MediaPlayer1->Open(); MediaPlayer1->Play(); } //---------------------------------- よろしくお願いします。

  • C++Builder6 での複素数計算

    C++builder6 で複素数計算が出来なくて困っています、 UNIT1.CPPのヘッダー部分に  #include <vcl.h>  #pragma hdrstop  #include <iostream>  #include <complex.h>  #include "Unit1.h" //-----------------------------  #pragma package(smart_init)  #pragma resource "*.dfm" を書いて イベントハンドラ部分に変数の宣言   complex<double> z; として緑色三角形の実行ボタンをクリックすると   「未定義のシンボル complex」 と言うエラーが発生します、 この解決方法を教えて頂ければ幸いです、宜しくお願いします。 (なお C++builder5 では何の問題もなく複素数計算のソフトが出来ていました)   

  • クラスのメンバ変数の宣言方法

    現在、プロジェクト内に”class PACKAGE TNumberEdit : public TEdit”というクラスを持った”NumberEdit.h”、”NumberEdit.cpp”ファイルを追加して、 Unit1.hファイル内の”class TTestForm : public TForm”このクラス内のpublicにメンバ変数として ”TNumberEdit *NumberEdit1;” このように宣言しました。 そして、 __fastcall TTestForm::TTestForm(TComponent* Owner) : TForm(Owner) { NumberEdit1 = new TNumberEdit(this); } //--------------------------------------------------------------------------- このようなプログラムを書くと次のようなエラーが出てきます。 [ILINK32 エラー] Error: 未解決の外部参照 'TNumberEdit::' が C:\MYWORK\....\CPP_BUILDER_2009\TEST_NUBEREDIT\DEBUG\UNIT1.OBJ から参照されました [ILINK32 エラー] Error: 未解決の外部参照 '__fastcall TNumberEdit::TNumberEdit(Classes::TComponent *)' が C:\MYWORK\.....\CPP_BUILDER_2009\TEST_NUBEREDIT\DEBUG\UNIT1.OBJ から参照されました このようなエラーを回避する方法はありますでしょうか?どうぞ教えて頂きますよう、お願い致します。

  • Borland社のコンパイラを使ったDLL

    C++BuilderでDLLファイルを使っておりますが、Vectorコンテナの値をコールバック出来ませんでした。Vectorコンテナを使ったコールバックを可能とする記述方法を教えてください。 Edit1には、思惑通りに102が返ります。Edit2には、1が、Edit3には2が返ります。この例では、201、202を返したいのです。 本体側 #include <vector> ・ ・ extern "C" __declspec(dllimport) int __stdcall test(int*,vector<int>); #pragma package(smart_init) #pragma resource "*.dfm" using namespace std; TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { vector<int> b; b.push_back(1); b.push_back(2); int *a; *a=1; Edit1->Text = IntToStr(test(a,b)); Edit2->Text = IntToStr(b[0]); Edit3->Text = IntToStr(b[1]); b.clear(); dll側 extern "C" __declspec(dllexport) int __stdcall test(int*,vector<int>*);//コンテナの引数の実験 ・ ・ //----------------------------------------------------------------------------- int __stdcall test(int *a,vector<int> &b) { //dllの引数の可能性の実験 for(unsigned int i;i<b.size();i++){ b[i] +=200; } *a+=1; return *a+100; } //-----------------------------------------------------------------------------

  • DLLサンプルプログラムが動きません

    Delphi XE5 starter で、 http://www39.atwiki.jp/kgh07155/pages/28.html を参考にして以下のようなプログラムを作りました。 コンパイルはできたのですが、Button1をクリックすると「TDllFormリソースが見つかりません」というエラーメッセージが出ます。 どういう風に修正すればいいのでしょうか? //***************************** //SamoleUnit2.pasの内容 unit Unit_Sample2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} function ShowDLLForm(hOwner: HWND): TModalResult; stdcall; external 'DLLSample.dll'; procedure ShowDLLForm2; external 'DLLSample.dll'; // ここまで、DLLを呼び出すための記述。 procedure TForm1.Button1Click(Sender: TObject); begin ShowDLLForm(Application.Handle); // DLL側でフォームを作成した後、 // 通常のフォームのShowModalメソッドと同じ動作をして // 作成したフォームを破棄。 end; procedure TForm1.Button2Click(Sender: TObject); begin ShowDLLForm2; // DLL側でフォームを作成した後、 // 作成したフォームを表示。 end; end. //******************************** //DllSample.dprの内容 library DLLSample; uses System.SysUtils, System.Classes, Windows, Forms, Controls, Unit_DLLForm in 'Unit_DLLForm.pas' {Form1}, Unit_Sample2 in 'Unit_Sample2.pas' {Form2}; type TDllForm = class(TForm) end; {$R *.res} function ShowDLLForm(hOwner: HWND): TModalResult; stdcall; var DllForm:TDllForm; begin Application.Handle := hOwner; // 呼び出し元の情報をDLL側が受け取る。 DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。 // フォームに配置された各オブジェクトも、自動で作成される。 Result := DllForm.ShowModal; // 返し値を設定。 DllForm.Free; // DLL側で作成したフォームを破棄。 Application.Handle := 0; // 呼び出し元の情報を破棄。 end; procedure ShowDLLForm2; var DllForm:TDllForm; begin DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。 DllForm.Show; // 作成したフォームを表示。 end; exports ShowDLLForm, ShowDLLForm2; begin end. //******************************** //unit_DLLForm.pasの内容 unit Unit_DLLForm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} end.

  • Type name expected エラーがでます。

    こんにちは。 非常に短い 次のコードで、 Type name expected エラーが出ます。 何か悪いのでしょうか。 コンパイラは、bcc55 (ボーランドのコマンドライン用の 無償のコンパイラです)。 #include <windows.h> #include "dialog1.h" BOOL CALLBACK dialogProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE h,HINSTANCE,LPSTR,int) { DialogBox(h,"DIALOG1",HWND_DESKTOP,(DLGPROC)dialogProc); return 0; } BOOL CALLBACK dialogProc(HWND hw,UINT msg,WPARAM wp,LPALAM lp){ return FALSE; } 何か分かる人がいましたら、 よろしくお願いします。 dialog1.cpp-------------------------------------- #include <windows.h> #include "dialog1.h" DIALOG1 DIALOG 100,100,200,80 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "FIRST DIALOG" FONT 10,"system" { DEFPUSHBUTTON "BEEP",ID_0,25,10,50,15 PUSHBUTTON "EXIT",ID_1,25,30,50,15 } dialog1.h----------------------------- #define ID_0 100 #define ID_1 101

  • C言語で文字列の比較をしたいです。

    C言語で文字列の比較をしたいです。 現在Visual C++ 2008 Express EditionをつかってWindowsプログラミングの勉強をしているのですが、文字列同士の比較で上手くいかなくなってしまったので、教えてください。 プログラムは、確認ボタンを押すとエディットボックスの内容を取得し、取得された内容が「"abc"」であれば処理を実行するというものです。 //宣言など #include <windows.h> #include <windowsx.h> #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <string.h> static TCHAR chords[512]; //WM_CREATEの部分 hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT") , TEXT("abc") , WS_CHILD | WS_VISIBLE | ES_LEFT |ES_MULTILINE | WS_VSCROLL , 10 , 150 , 300 , 200 , hWnd, (HMENU)4, hInst , NULL); //取得 GetWindowText(hEdit, chords, 512); //判定 if(_tcscmp(chords, TEXT("abc")) == 0)実行する処理; ソースはかなり省略されていますが、エディットボックスとボタンは機能しているようです。 実行すると 「 error C2664: 'wcscmp' : 1 番目の引数を 'TCHAR *[]' から 'const wchar_t *' に変換できません。」 というエラーが出ます。 UnicodeやTCHAR周りの問題のような気がしますが、どうすれば上手くいくのでしょうか?

  • CTreeCtrlのCreate関数でエラーになります。

    Visual C++ .NET Win32 プロジェクト で、アプリケーションを作成しようと思っています。 #include<afxwin.h> #include<afxcmn.h> // マルチスレッド CTreeCtrl *m_TreeCtrl; LRESULT CALLBACK int WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_LBUTTONDOWN: m_TreeCtrl=new CTreeCtrl; m_TreeCtrl->Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP, CRect(10, 10, 300, 100), CWnd::FromHandle(hWnd), 10000); break; case WM_CREATE: break; case WM_DESTROY: PostQuitMessage(0); break; case WM_PAINT: HDC hDC; PAINTSTRUCT Paint; hDC=BeginPaint(hWnd,&Paint); EndPaint(hWnd,&Paint); } return DefWindowProc(hWnd,message,wParam,lParam); } ・・・ と記述すると、エラーになります。 解決方法を教えてください。

専門家に質問してみよう