tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルUSBカメラ
記事No13457
投稿日: 2009/02/24(Tue) 10:33
投稿者かっけ
複数のUSBカメラの動画を1つのフォーム上に
表示する方法を教えて下さい。

[ツリー表示へ]
タイトルRe: USBカメラ
記事No13458
投稿日: 2009/02/24(Tue) 10:42
投稿者オショウ
> 複数のUSBカメラの動画を1つのフォーム上に
> 表示する方法を教えて下さい。

  USBカメラの仕様が解らないので、回答のしようがありません。

  またそのカメラには当然何らかのインターフェースソフトがある
  はずで、それらを使わないと表示できない場合もあります。

  プログラム的にフォーム上に表示させることができるかは、その
  仕様に準じます。

  一番低レベルなインターフェースを使って・・・と言うならば、
  マイクロソフトのVideo for Windowsの機能を使って表示させる
  ことができるはずなんですが・・・
  (低レベルとは、簡単にとかと言う意味ではありません)

  最近のDirectXでできないか・・・と言う部分は、そのカメラの
  ドライバー次第でしょう。(最近のならば多分できるはず)

  無茶苦茶な言い方をすれば・・・
  スキャナ用のTWAIN使ってもできる場合はあります。
  私の持っているUSBカメラは、できましたので。

※ ぐぐったら、かなりヒットしますヨ!
  ソースコード掲載のサイトもありますし・・・

以上。

[ツリー表示へ]
タイトルRe^2: USBカメラ
記事No13459
投稿日: 2009/02/24(Tue) 11:19
投稿者かっけ
> > 複数のUSBカメラの動画を1つのフォーム上に
> > 表示する方法を教えて下さい。

さっそくのレスありがとうございました。

>   USBカメラの仕様が解らないので、回答のしようがありません。
3,000円のカメラですので仕様といっても汎用的なソフトが作れるような気が
するのですが。。。

>   またそのカメラには当然何らかのインターフェースソフトがある
>   はずで、それらを使わないと表示できない場合もあります。
当方は特殊な作業に使用するソフトを作成しようとしています。
カメラ付属のソフトではできません。


>   プログラム的にフォーム上に表示させることができるかは、その
>   仕様に準じます。
>
>   一番低レベルなインターフェースを使って・・・と言うならば、
>   マイクロソフトのVideo for Windowsの機能を使って表示させる
>   ことができるはずなんですが・・・
>   (低レベルとは、簡単にとかと言う意味ではありません)
ネットで紹介されたソースでこれと言えるものがありませんでした。
(探し方に問題あるかも)

>   最近のDirectXでできないか・・・と言う部分は、そのカメラの
>   ドライバー次第でしょう。(最近のならば多分できるはず)
>
>   無茶苦茶な言い方をすれば・・・
>   スキャナ用のTWAIN使ってもできる場合はあります。
>   私の持っているUSBカメラは、できましたので。
これもネット上にあるソースで試しましたが、うまくできませんでした。

> ※ ぐぐったら、かなりヒットしますヨ!
>   ソースコード掲載のサイトもありますし・・・
サンプルソースを求めてかれこれ1週間さまよいましたが、
これといったソースにぶち当たれませんでした。


> 以上。

具体的なサンプルソースがあればありがたいのですが。。。

[ツリー表示へ]
タイトルRe: USBカメラ
記事No13460
投稿日: 2009/02/24(Tue) 12:48
投稿者K.J.K.
> 具体的なサンプルソースがあればありがたいのですが。。。

http://www.geocities.co.jp/SiliconValley/7406/tips/dshow/dshow2.html

まぁ、真面目に探せばすぐ見つかるものだと思います。

[ツリー表示へ]
タイトルRe^2: USBカメラ
記事No13461
投稿日: 2009/02/24(Tue) 14:20
投稿者かっけ
> > 具体的なサンプルソースがあればありがたいのですが。。。
>
> http://www.geocities.co.jp/SiliconValley/7406/tips/dshow/dshow2.html
>
> まぁ、真面目に探せばすぐ見つかるものだと思います。

ソースのありかをありがとうございます。
やってみたのですが、複数のカメラの動画を出すことができません。
何かアドバイスがあればお願いいたします。

[ツリー表示へ]
タイトルRe^3: USBカメラ
記事No13462
投稿日: 2009/02/24(Tue) 18:42
投稿者オショウ
> ソースのありかをありがとうございます。

  をを〜すでにカキコされてましたネ〜

> やってみたのですが、複数のカメラの動画を出すことができません。
> 何かアドバイスがあればお願いいたします。

  なぜいつも『後だしジャンケン』みたいに要件が出るかネ〜

  それに、複数だせるように自分で改造できないの?

※ 教えられたもので最初からすべてできたら、あなたの仕事は?
  したいことの技術習得はどうなるの?

以上。

[ツリー表示へ]
タイトルRe^4: USBカメラ
記事No13463
投稿日: 2009/02/24(Tue) 19:14
投稿者しんご
かっけさんが書いた、映像を映し出す部分のプログラムだけで
かまいませんので、この掲示板に掲載してください。

長いプログラムを掲載されても、「うへっ」と
思ってしまうので、必要な部分だけお願いします。

ただ「できない、できない」と言われても、
何が悪いのかがわからないので
アドバイスしようにもできません。。

それと、開発環境の明記をお願いします。

[ツリー表示へ]
タイトルRe^5: USBカメラ
記事No13465
投稿日: 2009/02/24(Tue) 19:26
投稿者かっけ
> かっけさんが書いた、映像を映し出す部分のプログラムだけで
> かまいませんので、この掲示板に掲載してください。
>
> 長いプログラムを掲載されても、「うへっ」と
> 思ってしまうので、必要な部分だけお願いします。
>
> ただ「できない、できない」と言われても、
> 何が悪いのかがわからないので
> アドバイスしようにもできません。。
>
> それと、開発環境の明記をお願いします。

CAMERA_FILTER_NAME = "USB ビデオ デバイス"
とすると2台のうち1台はフォーム上に表示できました。
もう1台を表示するにはどうしていいのか検討もつかない状態です。
できればデバイスをコンボボックスなどで選択したいのですが、、、
VB6.0です。

こんな情報でいいですか?
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^6: USBカメラ
記事No13466
投稿日: 2009/02/24(Tue) 20:14
投稿者しんご
あのですね、

> CAMERA_FILTER_NAME = "USB ビデオ デバイス"

と書いただけでは映像は映らないですよね?

たとえば、現在時刻をLabel1に表示させるプログラムを
載せてくださいという場合

s = Format$(Now,"yyyy/mm/dd hh:nn:ss")

だけじゃ回答になってませんよね?

Dim s as string

s = Format$(Now,"yyyy/mm/dd hh:nn:ss")
Label1.Caption = s

が正しいですよね?

> VB6.0です。

OS(サーぴすパックも)とVB6のサービスパックは何ですか?無印ですか?

[ツリー表示へ]
タイトルRe^7: USBカメラ
記事No13469
投稿日: 2009/02/27(Fri) 10:29
投稿者かっけ
'カメラのフィルタ名
Private Const CAMERA_FILTER_NAME$ = "USB ビデオ デバイス"
Private Const CAMERA_OUTPUTPIN_NAME$ = "~Capture"

'フィルタグラフマネージャ
Private mGrp As QuartzTypeLib.FilgraphManager

Private Sub Form_Load()

  'グラフマネージャの作成
  Set mGrp = New QuartzTypeLib.FilgraphManager

  'グラフにキャプチャ(カメラ)フィルタを追加する
  Dim cameraflt As QuartzTypeLib.IFilterInfo
  Set cameraflt = AddFilter(mGrp, CAMERA_FILTER_NAME$)
  If cameraflt Is Nothing Then
    MsgBox "カメラ'" + CAMERA_FILTER_NAME + "'が見つかりません。" + vbCrLf + "カメラの名前を確認してください。"
    Exit Sub
  End If

  'グラフにビデオレンダラフィルタを追加する
  AddFilter mGrp, "Video Renderer"

  'カメラの出力ピンを取得
  Dim camerapin As QuartzTypeLib.IPinInfo
  Dim pp As QuartsTypeLib.IPinInfo

    For Each pp In cameraFlt.Pins
        If pp.Direction = 1 Then
            Set camerapin = pp
            Exit For
        End If
    Next

  'カメラの出力ピンからフィルタを接続し、グラフを構築する
  camerapin.Render

  'ビデオサイズ(縦横)を取得
  Dim bv As QuartzTypeLib.IBasicVideo
  Dim vx&, vy&
  Set bv = mGrp
  bv.GetVideoSize vx, vy

  'ビデオサイズに合わせてウィンドウを調整
  Dim winx&, winy& 'ウィンドウの縁サイズ
  Me.ScaleMode = vbTwips
  winx = Me.Width - Me.ScaleWidth
  winy = Me.Height - Me.ScaleHeight
  Me.Width = winx + vx * Screen.TwipsPerPixelX
  Me.Height = winy + vy * Screen.TwipsPerPixelY

  'ウィンドウ内で動画を再生させる
  Dim vw As QuartzTypeLib.IVideoWindow
    Dim L As Long, T As Long, W As Long, H As Long
  Set vw = mGrp
  vw.WindowStyle = &H40000000 'WS_CHILD

    L = 1035: T = 5670: W = 1995: H=1485
    vw.SetWindowPosition L / 15, T / 15, W / 15, H / 15
  vw.Owner = Me.hWnd

  '再生
  mGrp.Run

End Sub



'レジストリに登録されているフィルタをグラフに追加する
Public Function AddFilter(ByRef Grp As QuartzTypeLib.FilgraphManager, ByVal FilterName$) As IFilterInfo
 Dim regflt As QuartzTypeLib.IRegFilterInfo
 For Each regflt In Grp.RegFilterCollection
  If regflt.Name = FilterName$ Then
   regflt.Filter AddFilter
  Exit Function
 End If
 Next
End Function

こんな感じです。

VB6.0 SP3 です。

よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: USBカメラ
記事No13470
投稿日: 2009/02/27(Fri) 21:39
投稿者K.J.K.
提示されたコードを利用するのならば、それぞれ別個のウィンドウに出す場合は、
エラー処理を無視すると、おそらくこんな感じでは。
なお、試してないので適宜修正してください。
ついでに、VB6 は SP6 が推奨です。

Private Sub Form_Load()
    Dim fltCamera1 As QuartzTypeLib.IFilterInfo
    Dim fltCamera2 As QuartzTypeLib.IFilterInfo
    Dim regFilter As QuartzTypeLib.IRegFilterInfo
    Dim pinCamera As QuartsTypeLib.IPinInfo

  Set mGrp = New QuartzTypeLib.FilgraphManager

    On Error Resume Next
    For Each regFilter In In mGrp.RegFilterCollection
        If regFilter.Name Like CAMERA_FILTER_NAME & "*" Then
            If fltCamera1 Is Nothing Then
                Call regFilter.AddFilter(fltCamera1)
            Else
                Call regFilter.AddFilter(fltCamera2)
                If Not (fltCamera2 Is Nothing) Then Exit For
            End If
        End If
    Next

    If Not (fltCamera1 Is Nothing) Then
        For Each pinCamera In fltCamera1.Pins
            If 1 = pinCamera.Direction Then
                Call pinCamera.Render
                Set pinCamera = Nothing
                Exit For
            End If
        Next
    End If

    If Not (fltCamera2 Is Nothing) Then
        For Each pinCamera In fltCamera2.Pins
            If 1 = pinCamera.Direction Then
                Call pinCamera.Render
                Set pinCamera = Nothing
                Exit For
            End If
        Next
    End If

  Call mGrp.Run

End Sub

[ツリー表示へ]
タイトルRe^4: USBカメラ
記事No13464
投稿日: 2009/02/24(Tue) 19:15
投稿者かっけ
> > ソースのありかをありがとうございます。
>
>   をを〜すでにカキコされてましたネ〜
>
> > やってみたのですが、複数のカメラの動画を出すことができません。
> > 何かアドバイスがあればお願いいたします。
>
>   なぜいつも『後だしジャンケン』みたいに要件が出るかネ〜
>
>   それに、複数だせるように自分で改造できないの?
>
> ※ 教えられたもので最初からすべてできたら、あなたの仕事は?
>   したいことの技術習得はどうなるの?
>
> 以上。

すみません。
小生はVB初心者なのでどのように改造したらよいか分かりません。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: USBカメラ
記事No13467
投稿日: 2009/02/24(Tue) 20:40
投稿者K.J.K.
> やってみたのですが、複数のカメラの動画を出すことができません。

まず、複数のカメラを表すフィルタを含むグラフを構築するように
試してみてください。試すには、リンク先で説明されている GraphEdit
を用いてください。

それができたら、リンク先で説明されているように、それをコード化
するだけです。

[ツリー表示へ]
タイトルRe^2: USBカメラ
記事No13468
投稿日: 2009/02/25(Wed) 13:07
投稿者おっせっかい
プログラムは、先輩諸氏のご指導にお任せするとして。
私も同様の件でずいぶん苦労しました。PG以外にも注意
する点があります。

で、参考までに。

http://pasokoma.jp/bbs4/pslg23743#23743

[ツリー表示へ]