C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

カメラ台数を増やす /しろ (17/09/28(Thu) 12:28) #85265
Re[1]: カメラ台数を増やす /みい (17/09/28(Thu) 15:32) #85269
Re[1]: カメラ台数を増やす /みい (17/09/28(Thu) 20:08) #85270
Re[1]: カメラ台数を増やす /Jitta (17/09/28(Thu) 21:31) #85271
  └ Re[2]: カメラ台数を増やす /しろ (17/09/29(Fri) 18:45) #85273
    └ Re[3]: カメラ台数を増やす /Jitta (17/09/30(Sat) 09:46) #85275
      └ Re[4]: カメラ台数を増やす /しろ (17/09/30(Sat) 12:37) #85276
        └ Re[5]: カメラ台数を増やす /みい (17/09/30(Sat) 15:04) #85277
          └ Re[6]: カメラ台数を増やす /しろ (17/09/30(Sat) 19:02) #85278
            └ Re[7]: カメラ台数を増やす /あんぴん (17/10/02(Mon) 09:24) #85281
              └ Re[8]: カメラ台数を増やす /Jitta (17/10/07(Sat) 20:25) #85325
                └ Re[9]: カメラ台数を増やす /しろ (17/10/11(Wed) 07:02) #85336
                  └ Re[10]: カメラ台数を増やす /Jitta (17/10/11(Wed) 21:54) #85342
                    └ Re[11]: カメラ台数を増やす /しろ (17/10/12(Thu) 07:23) #85346
                      ├ Re[12]: カメラ台数を増やす /ぶなっぷ (17/10/12(Thu) 14:03) #85347
                      └ Re[12]: カメラ台数を増やす /Jitta (17/10/14(Sat) 20:40) #85363
                        └ Re[13]: カメラ台数を増やす /しろ (17/10/14(Sat) 21:52) #85364
                          ├ Re[14]: カメラ台数を増やす /Jitta (17/10/15(Sun) 09:03) #85365
                          │└ Re[15]: カメラ台数を増やす /Jitta (17/10/15(Sun) 13:01) #85366
                          │  └ Re[16]: カメラ台数を増やす /しろ (17/10/15(Sun) 20:46) #85368
                          │    ├ Re[17]: カメラ台数を増やす /Azulean (17/10/15(Sun) 21:50) #85370
                          │    └ Re[17]: カメラ台数を増やす /Jitta (17/10/16(Mon) 21:15) #85383
                          └ Re[14]: カメラ台数を増やす /PANG2 (17/10/16(Mon) 14:21) #85377


親記事 / ▼[ 85269 ] ▼[ 85270 ] ▼[ 85271 ]
■85265 / 親階層)  カメラ台数を増やす
□投稿者/ しろ (27回)-(2017/09/28(Thu) 12:28:19)

分類:[.NET 全般] 

前にもお世話に利ましたがもう少し改良を
くえたいのでどうかお願いします。
http://note.websmil.com/vb/accord/vb-net-accord-usb%e3%82%ab%e3%83%a1%e3%83%a9%e7%94%bb%e5%83%8f%e8%a1%a8%e7%a4%ba
のプログラムを参考に作りましたがもう一台カメラの台数を増やして
同じことをやらせようと持っているのですがもう一代目のビデオデバイスの
設定のところがうまくいきません。コピペしておんなじ事をやらせようとしても
うまくいかないのはなぜでしょうか?

'ビデオデバイス一覧を表示する
_videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

ComboBox1.Items.Clear()
If _videoDevices.Count <> 0 Then
For Each device In _videoDevices
ComboBox1.Items.Add(device.Name)
Next
ComboBox1.SelectedIndex = 0
End If
End Sub
_videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

ComboBox2.Items.Clear()
If _videoDevices.Count <> 0 Then
For Each device In _videoDevices
ComboBox2.Items.Add(device.Name)
Next
ComboBox1.SelectedIndex = 1
End If
End Sub

[ □ Tree ] 返信 編集キー/

▲[ 85265 ] / 返信無し
■85269 / 1階層)  Re[1]: カメラ台数を増やす
□投稿者/ みい (70回)-(2017/09/28(Thu) 15:32:49)
No85265 (しろ さん) に返信
> ComboBox2.Items.Clear()
> If _videoDevices.Count <> 0 Then
> For Each device In _videoDevices
> ComboBox2.Items.Add(device.Name)
> Next
> ComboBox1.SelectedIndex = 1
> End If
ここの「ComboBox『1』.SelectedIndex = 1」は転記ミスでしょうか。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85265 ] / 返信無し
■85270 / 1階層)  Re[1]: カメラ台数を増やす
□投稿者/ みい (71回)-(2017/09/28(Thu) 20:08:21)
No85265 (しろ さん) に返信
> http://note.websmil.com/vb/accord/vb-net-accord-usb%e3%82%ab%e3%83%a1%e3%83%a9%e7%94%bb%e5%83%8f%e8%a1%a8%e7%a4%ba
> のプログラムを参考に作りましたがもう一台カメラの台数を増やして
> 同じことをやらせようと持っているのですがもう一代目のビデオデバイスの
> 設定のところがうまくいきません。コピペしておんなじ事をやらせようとしても
> うまくいかないのはなぜでしょうか?
設定ではなく一覧表示のところのコードを載せられているのでどううまくいかないのか分かりませんが、
(HPと同じように書いているとして)_videoSource を2台で使いまわしているということはありませんか?

実際どううまくいかないか書かれた方が回答もらえやすいと思います。


[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85265 ] / ▼[ 85273 ]
■85271 / 1階層)  Re[1]: カメラ台数を増やす
□投稿者/ Jitta (316回)-(2017/09/28(Thu) 21:31:55)
No85265 (しろ さん) に返信
> のプログラムを参考に作りましたがもう一台カメラの台数を増やして
> 同じことをやらせようと持っているのですがもう一代目のビデオデバイスの
> 設定のところがうまくいきません。コピペしておんなじ事をやらせようとしても
> うまくいかないのはなぜでしょうか?

 前にも同じことを書いたと思いますが、
「うまくいかない」というのが実際に何が起こっているのか、説明してください。
あなたが期待する動作は、どのようなものですか。
それに対して、実際におこっている動作は、どのようなものですか。
ここに書いてあるコードは、一体何がしたいのでしょうか。
Sub の始めがないのに End Sub があるのは、一体どうしてですか?
情報を小出しにするのではなく、必要、不必要を判断して、きちんとまとめてください。
判断できないなら、全部出してください。
出せないなら、有償のサポートに依頼してください。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85271 ] / ▼[ 85275 ]
■85273 / 2階層)  Re[2]: カメラ台数を増やす
□投稿者/ しろ (28回)-(2017/09/29(Fri) 18:45:53)
色々試してみた結果ビデオデバイスの一覧を表示は
できるようになりましたがビデオデバイスを取得画像の
表示とUSBデバイスに接続でうまくいきません。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85273 ] / ▼[ 85276 ]
■85275 / 3階層)  Re[3]: カメラ台数を増やす
□投稿者/ Jitta (317回)-(2017/09/30(Sat) 09:46:14)
No85273 (しろ さん) に返信
> 色々試してみた結果ビデオデバイスの一覧を表示は
> できるようになりましたがビデオデバイスを取得画像の
> 表示とUSBデバイスに接続でうまくいきません。

いろいろ試してみましたか。そうするとできます。


> もう一代目のビデオデバイスの設定のところがうまくいきません。

こう書いてあったのですが、

> ビデオデバイスの一覧を表示はできるようになりました

ということは、書いてあること(デバイスを設定する)と、実際に行いたいこと(一覧表示する)とは、違っていたと言うことですね。



あなたがいるところに、私たちはいません。あなたではないので、あなたが言葉にしていない、あなたが考えていることもわかりません。

ですから、あなたが何を見て、何を試して、どのような結果を得て、どのようなことを考えたのか、わかりません。

問題というのは、期待することと現状が異なるから問題と認識します。

あなたが期待することなんですか。それに対して、現状はどうなっていますか。

その差異がわからなければ、アドバイスも何もしようがありません。

書いてあることと、実際に行いたいことが異なっているなら、なおさら無理です。

投稿前に読み直して、特に「てにをは」の使い方が間違っていないか、確認してください。 http://www.raitonoveru.jp/howto2/bunnsyou/03.html


→ 色々試してみた結果、ビデオデバイスの一覧を表示することは
→できるようになりました。しかし、ビデオデバイスから取得した画像の
→表示と、USBデバイスへの接続がうまくいきません。

USB カメラですよね?「USB デバイスへの接続」ができていないなら、画像の表示ができるはずないですよね?
でも、単体の場合はできているんですよね?ということは、選択する部分に誤りがある、ということになりますよね。
ドロップダウンリストにデバイス名を表示させて、デバイスIDを取得すれば良いのですが、、、
いや、何をしようとしていて、実際にどのようにして、どのような結果が得られたのかわからないので、これ以上はやめておこう。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85275 ] / ▼[ 85277 ]
■85276 / 4階層)  Re[4]: カメラ台数を増やす
□投稿者/ しろ (29回)-(2017/09/30(Sat) 12:37:54)
説明が間違ていてすみません
開始とビデオデバイス取得画像表示のところが
カメラを増やした時の設定方法がわかりません。
ビデオデバイス一覧を表示する部分は多分これで
いいともうのですが間違っているでしょうか?

'ビデオデバイス一覧を表示する
_videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

ComboBox1.Items.Clear()
If _videoDevices.Count <> 0 Then
For Each device In _videoDevices
ComboBox1.Items.Add(device.Name)
Next
ComboBox1.SelectedIndex = 0
End If
End Sub

Dim _videoSource As VideoCaptureDevice = Nothing

'ビデオデバイス一覧を表示する
_videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

ComboBox2.Items.Clear()
If _videoDevices.Count <> 0 Then
For Each device In _videoDevices
ComboBox2.Items.Add(device.Name)
Next
ComboBox2.SelectedIndex = 0
End If
End Sub

Dim _videoSource As VideoCaptureDevice = Nothing
'[開始]
Private Sub StartButton_Click(sender As Object, e As EventArgs) Handles StartButton.Click
If ComboBox1.Items.Count = 0 Then
Return
End If

Dim MonikerString = _videoDevices(ComboBox1.SelectedIndex).MonikerString '最初のビデオデバイスを使用

_videoSource = New VideoCaptureDevice(MonikerString)
AddHandler _videoSource.NewFrame, AddressOf Me.Video_NewFrame
_videoSource.Start()
End Sub
'ビデオデバイス取得画像表示
Private Sub Video_NewFrame(sender As Object, eventArgs As NewFrameEventArgs)
Dim img = DirectCast(eventArgs.Frame.Clone(), Bitmap)
PictureBox1.Image = img
End Sub



[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85276 ] / ▼[ 85278 ]
■85277 / 5階層)  Re[5]: カメラ台数を増やす
□投稿者/ みい (72回)-(2017/09/30(Sat) 15:04:20)
No85276 (しろ さん) に返信
Jittaさんが書かれているように「あなたが期待することなんですか。」
> 開始とビデオデバイス取得画像表示のところが
> カメラを増やした時の設定方法がわかりません。
1つの開始ボタンで同時に開始したいのか、
それぞれの開始ボタンでそれぞれ開始したいのか…
文章、ソースから読み取れません。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85277 ] / ▼[ 85281 ]
■85278 / 6階層)  Re[6]: カメラ台数を増やす
□投稿者/ しろ (30回)-(2017/09/30(Sat) 19:02:20)
No85277 (みい さん) に返信
> ■No85276 (しろ さん) に返信
> Jittaさんが書かれているように「あなたが期待することなんですか。」
>>開始とビデオデバイス取得画像表示のところが
>>カメラを増やした時の設定方法がわかりません。
> 1つの開始ボタンで同時に開始したいのか、
> それぞれの開始ボタンでそれぞれ開始したいのか…
> 文章、ソースから読み取れません。


開始ボタンを押したらカメラに接続し表示させたいのですが
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85278 ] / ▼[ 85325 ]
■85281 / 7階層)  Re[7]: カメラ台数を増やす
□投稿者/ あんぴん (1回)-(2017/10/02(Mon) 09:24:19)
>>■No85276 (しろ さん) に返信

お言葉ですが、自分の意図を上手く伝えられない、相手の意図を上手く読めないというのはプログラマとして致命的だと思います。
何故お二方の忠告を徹底的に無視されているのでしょうか?上手くいかなくて焦る気持ちは分かりますが、あなたがその姿勢では答えられる回答も出すことが出来ません。
ボタンを押して接続したいというのは分かります。ボタン一つで2台接続したいのか、カメラごとにそれぞれボタンを用意したいのか、これすらこちらに伝えるのは困難ですか?
回答をされる方々は神様ではありません。パソコンの画面の内容もエラー内容もあなたの文章からしか読み取ることが出来ません。
本当に回答が欲しいのであれば、もう一度トピック内の書き込みを読み直してあなたの状況が正しく伝わるように説明をお願いします。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85281 ] / ▼[ 85336 ]
■85325 / 8階層)  Re[8]: カメラ台数を増やす
□投稿者/ Jitta (321回)-(2017/10/07(Sat) 20:25:47)
元のコード
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Dim _videoDevices As FilterInfoCollection

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'ビデオデバイス一覧を表示する
    _videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

    ComboBox1.Items.Clear()
    If _videoDevices.Count <> 0 Then
        For Each device In _videoDevices
            ComboBox1.Items.Add(device.Name)
        Next
        ComboBox1.SelectedIndex = 0
    End If
End Sub
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ここに書かれたコード
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
☆ここにあるはずのメソッド識別子がない
    'ビデオデバイス一覧を表示する
    _videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

    ComboBox1.Items.Clear()
    If _videoDevices.Count <> 0 Then
        For Each device In _videoDevices
            ComboBox1.Items.Add(device.Name)
        Next
        ComboBox1.SelectedIndex = 0
    End If
End Sub

☆ここにあるはずのメソッド識別子がない
    _videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

    ComboBox2.Items.Clear()
    If _videoDevices.Count <> 0 Then
        For Each device In _videoDevices
            ComboBox2.Items.Add(device.Name)
        Next
        ComboBox1.SelectedIndex = 1
    End If
End Sub
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

最初に指摘していますが、メソッド識別子がないので、これは「コンパイルできないコード」です。
元のページのコードで、接続されているデバイスをコンボボックスのリストに列挙し、
ボタンを押したときに選択されているデバイスの映像を取得する、ということができています。
なので、
元のコードとは違う何を望み、
どう考えてコードを修正し、
その結果どのようになったのかがわかりません。

なんとなく、「複数のカメラの映像を同時に表示したい」かもしれない、
という気がしてきたけど、深読みしてもしょうがないのでやめとく。

[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85325 ] / ▼[ 85342 ]
■85336 / 9階層)  Re[9]: カメラ台数を増やす
□投稿者/ しろ (31回)-(2017/10/11(Wed) 07:02:02)
No85325 (Jitta さん) に返信
へんとうありがとぅございます。
Jittaさんありがとぅございます
カメラをふく数台増やして画面も増やしたいので
説明不足で済みません。
今現在カメラを2台あり出力も2増やしたいので
出力の画面の二代めの設定がわからないんです。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85336 ] / ▼[ 85346 ]
■85342 / 10階層)  Re[10]: カメラ台数を増やす
□投稿者/ Jitta (322回)-(2017/10/11(Wed) 21:54:45)
No85336 (しろ さん) に返信
> ■No85325 (Jitta さん) に返信
> へんとうありがとぅございます。
> Jittaさんありがとぅございます
> カメラをふく数台増やして画面も増やしたいので
> 説明不足で済みません。
> 今現在カメラを2台あり出力も2増やしたいので
> 出力の画面の二代めの設定がわからないんです。

「ありがとぅございます」って、なんか、馬鹿にされている感じがするんですけど。

あなたの立場は何ですか。
1.他人が作ったプログラムをコード化する
2.プログラムを作る

1なら、プログラムを作る人に、きちんとプログラムを作るように言ってください。
2なら、プログラムを作りましょう。
プログラムとは、するべきことと、それを実行する順番です。
音楽会のプログラム、運動会のプログラム、終業式・始業式・卒業式の式次、それらとおなじです。
何を、どのような順番で行えば、目的が達成できるのか、きちんと考えることから始めましょう。
プログラムを作ることと、プログラムをコード化することを一緒に行おうとするから混乱するのです。

あなたが参照しているコードを、まずはプログラム、実行することとその順番に直しましょう。
そうすると、試行錯誤しなくても、何をしなければならないか、見えてきます。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85342 ] / ▼[ 85347 ] ▼[ 85363 ]
■85346 / 11階層)  Re[11]: カメラ台数を増やす
□投稿者/ しろ (32回)-(2017/10/12(Thu) 07:23:25)
No85342 (Jitta さん) に返信
> ■No85336 (しろ さん) に返信
>>■No85325 (Jitta さん) に返信

>
> 「ありがとぅございます」って、なんか、馬鹿にされている感じがするんですけど。
決して馬鹿にしているつもりわないですよ!!
自分で色々考えているのですがなかなかわからないのでプログラムを
書いてもらってもいいですか?
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85346 ] / 返信無し
■85347 / 12階層)  Re[12]: カメラ台数を増やす
□投稿者/ ぶなっぷ (130回)-(2017/10/12(Thu) 14:03:06)
まぁ、どうしても頭の固い人って言うのは一定数おられます。
そんなたぐいの話ですね。
要は見る方向が違うんですね、こればっかりは本人が
気づかないとどうしようもない。

というわけで例を挙げて解説してみましょう。
まずは、困っていることを定義します。

[困っていること]
兄弟2人が、同じ時間に放送されるTV番組を見たくて、
チャンネルの取り合いで大喧嘩している

[相談内容]
この内容に対して、喧嘩をやめさせたいと、そのままの
相談内容なら、いろんなアドバイスができるでしょう。
・テレビをもう一台買う
・どちらかの番組を録画する
・どっちかに交換条件を提示してあきらめてもらう
    : など

しかし、「2つの番組を同時に見られないんだよ」という
ような相談だったらどうですか?
今どきなら、2画面同時視聴型テレビとかもありますが、
その答えじゃ根本解決には至らないよね。

なんとなく伝わりますか?
質問の仕方がまずいんです。

[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85346 ] / ▼[ 85364 ]
■85363 / 12階層)  Re[12]: カメラ台数を増やす
□投稿者/ Jitta (324回)-(2017/10/14(Sat) 20:40:22)
No85346 (しろ さん) に返信
> ■No85342 (Jitta さん) に返信
>>■No85336 (しろ さん) に返信
> >>■No85325 (Jitta さん) に返信
> 。
>>
>>「ありがとぅございます」って、なんか、馬鹿にされている感じがするんですけど。
> 決して馬鹿にしているつもりわないですよ!!
> 自分で色々考えているのですがなかなかわからないのでプログラムを
> 書いてもらってもいいですか?

書いてもらってもいいですかも何も、何がしたいのかわからないので、答えられません。
と、何度も書いています。

どのような画面で、
ユーザーがどのような操作をしたら、
どのカメラ画像を、
どこに、
表示したいのでしょうか。

「うまくいきません」とは、どのような期待に対して、どのようになるのでしょうか。

ここに転記されたコードはコンパイルできません。
ですから、「うまくいきません」より前の状態だと思っています。
あなたが実行したコードを転記してください。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85363 ] / ▼[ 85365 ] ▼[ 85377 ]
■85364 / 13階層)  Re[13]: カメラ台数を増やす
□投稿者/ しろ (33回)-(2017/10/14(Sat) 21:52:36)
大体ですがこんな感じです・↓
Imports AForge.Video
Imports AForge.Video.DirectShow

Public Class Form1
Dim _videoDevices1 As FilterInfoCollection
Dim _videoDevices As FilterInfoCollection

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'保存先の指定
TextBox1.Text = "C:\tic\"
'スイッチを使用禁止にする
' ComboBox1.Enabled = False
Button2.Enabled = False
Button3.Enabled = False
Button4.Enabled = False
Button5.Enabled = False
'ビデオデバイス一覧を表示する
_videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

ComboBox1.Items.Clear()
If _videoDevices.Count <> 0 Then
For Each device In _videoDevices
ComboBox1.Items.Add(device.Name)
Next
ComboBox1.SelectedIndex = 0

End If

_videoDevices1 = New FilterInfoCollection(FilterCategory.VideoInputDevice)

ComboBox2.Items.Clear()
If _videoDevices.Count <> 0 Then
For Each device In _videoDevices
ComboBox2.Items.Add(device.Name)
Next
ComboBox2.SelectedIndex = 0
End If


End Sub

Dim _videoSource As VideoCaptureDevice = Nothing
Private ReadOnly cameraControl1 As Object
Private ReadOnly dt As Object
Private formatteddate As String
Private intNUM As Integer

わからんところ↓ビデオデバイスを画像をのComboBox2で
選択された2代目カメラPictureBox3出力されないところ。

'ビデオデバイス取得画像表示
Private Sub Video_NewFrame(sender As Object, eventArgs As NewFrameEventArgs)
Dim img = DirectCast(eventArgs.Frame.Clone(), Bitmap)
PictureBox1.Image = img



'ビデオデバイス取得画像表示
' Private Sub Video_NewFrame1(sender As Object, eventArgs As NewFrameEventArgs)
' Dim img1 = DirectCast(eventArgs1.Frame.Clone(), Bitmap)
' PictureBox3.Image = img1
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

ここでボタンを押すとComboBox1が例えばaのPictureBox1に接続表示
で、ComboBox1で選択された2代目がPictureBox3に出力されるようにしたいのですが
なかなかうまくいかないです。↓

'USBビデオデバイスに接続表示
If ComboBox1.Items.Count = 0 Then
Return
End If

Dim MonikerString = _videoDevices(ComboBox1.SelectedIndex).MonikerString '最初のビデオデバイスを使用

_videoSource = New VideoCaptureDevice(MonikerString)
AddHandler _videoSource.NewFrame, AddressOf Me.Video_NewFrame
_videoSource.Start()

'スイッチを使用可能にする
Button2.Enabled = True
Button3.Enabled = True
Button4.Enabled = True
Button5.Enabled = True


End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'USBビデオデバイス停止
If _videoSource Is Nothing Then
Return
End If

If _videoSource.IsRunning Then
_videoSource.SignalToStop() 'ビデオデバイスの停止
_videoSource.WaitForStop() '完全に停止するまで待つ
_videoSource = Nothing
End If
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
' 自身のフォームを閉じる
Me.Close()
End
End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

' カウンタ
Label2.Text = Label2.Text + 1
'保存先を指定してjpgファぃるに保存する
Dim ro As String = TextBox1.Text

Dim dt = DateTime.Now
formatteddate = dt.ToString("yyyy年MM月dd日hh時mm秒ss分")



Dim fileName As String = ro + formatteddate + ".jpg"
Label3.Text = formatteddate

' MessageBox.Show(fileName)
PictureBox1.Image.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg)

'
' FileStream を開く
Dim hStream As New System.IO.FileStream(fileName, System.IO.FileMode.Open)

' FileStream から画像を読み込んで表示
Me.PictureBox2.Image = Image.FromStream(hStream)

' FileStream を閉じる (正しくは オブジェクトの破棄を保証する を参照)
hStream.Close()


End Sub

Private Function vrnINPUT() As String
Throw New NotImplementedException()
End Function

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
'カウンタ内容を0にリセットする
Label2.Text = "0"
End Sub


End Class

[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85364 ] / ▼[ 85366 ]
■85365 / 14階層)  Re[14]: カメラ台数を増やす
□投稿者/ Jitta (325回)-(2017/10/15(Sun) 09:03:05)
2017/10/15(Sun) 13:02:21 編集(投稿者)
2017/10/15(Sun) 13:01:00 編集(投稿者)

Imports AForge.Video
Imports AForge.Video.DirectShow

Public Class Form1
    Dim _videoDevices1 As FilterInfoCollection
    Dim _videoDevices As FilterInfoCollection

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        '保存先の指定
        TextBox1.Text = "C:\tic\"
        'スイッチを使用禁止にする
        ' ComboBox1.Enabled = False
        Button2.Enabled = False
        Button3.Enabled = False
        Button4.Enabled = False
        Button5.Enabled = False
        'ビデオデバイス一覧を表示する
        _videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice)

        ComboBox1.Items.Clear()
        If _videoDevices.Count <> 0 Then
            For Each device In _videoDevices
                ComboBox1.Items.Add(device.Name)
            Next
            ComboBox1.SelectedIndex = 0
        End If

        '※ _videoDevices と同じなので不要
        _videoDevices1 = New FilterInfoCollection(FilterCategory.VideoInputDevice)

        ComboBox2.Items.Clear()
        '※ _videoDevices1 を使っていなければおかしい
        '※ こういうところが「何がしたいの?」とわからなくさせる。
        '※ 「0 ではない」ではなく、「2以上なら」では?
        '※ comboBox2 に表示させる条件、モノが不明
        '※ 「カメラが2台以上あるとき」で、「2台以上ある」のは確定なのか。
        '※ ここで初期値としたいのは「ComboBox1 とは違うもの」なのか。
        '※ などの仕様が不明。
        If _videoDevices.Count <> 0 Then
            For Each device In _videoDevices
                ComboBox2.Items.Add(device.Name)
            Next
            '※ こちらは 「ComboBox2.SelectedIndex = 1」 では?
            ComboBox2.SelectedIndex = 0
        End If
    End Sub

    Dim _videoSource As VideoCaptureDevice = Nothing
    Private ReadOnly cameraControl1 As Object
    Private ReadOnly dt As Object
    Private formatteddate As String
    Private intNUM As Integer

>    わからんところ↓ビデオデバイスを画像をのComboBox2で
>    選択された2代目カメラPictureBox3出力されないところ。
    '※ 「選択された2台目のカメラがPictureBox3に出力されない」?

    'ビデオデバイス取得画像表示
    Private Sub Video_NewFrame(sender As Object, eventArgs As NewFrameEventArgs)
        Dim img = DirectCast(eventArgs.Frame.Clone(), Bitmap)
        PictureBox1.Image = img

        'ビデオデバイス取得画像表示
        ' Private Sub Video_NewFrame1(sender As Object, eventArgs As NewFrameEventArgs)
        ' Dim img1 = DirectCast(eventArgs1.Frame.Clone(), Bitmap)
        ' PictureBox3.Image = img1
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
>        ここでボタンを押すとComboBox1が例えばaのPictureBox1に接続表示
>        で、ComboBox1で選択された2代目がPictureBox3に出力されるようにしたいのですが
>        なかなかうまくいかないです。↓

        'USBビデオデバイスに接続表示
        '※ なぜ ComboBox2 の状態は調べないのですか?
        '※ ComboBox は、「選択していない」状態が選べます。
        '※ また、「Combo」は、DropdownList と TextBox のコンボ(組み合わせ)を意味します。
        '※ カメラを示さない文字列が入力されていたら、どうしますか。
        If ComboBox1.Items.Count = 0 Then
            Return
        End If

        '※ ここから「スイッチを使用可能にする」までの行は、何をしていますか。
        '※ その意味を知ってください。
        '※ プログラムは、「計画、予定、内容」を意味します。
        '※ 「プログラムを作る」は、コードを書くことではなく、コンピュータの動作予定を作ることです。
        '※ 今回のメインはここです。ここが何をしているのか、理解してください。
        '※ 今のプログラムは、
        '※ 「ComboBox1 に選択されているカメラと接続する」
        '※ 「接続したカメラからフレームの入力があれば Me.Video_NewFrame を実行するようにする」
        '※ 「接続したカメラからの入力を開始する」
        '※ です。これが、どのようになればいいのか、コードの前にプログラムを作ってください。
        '※ プログラム=何を、どのような順で実行するか、ができなければ、コードは書けません。
        Dim MonikerString = _videoDevices(ComboBox1.SelectedIndex).MonikerString '最初のビデオデバイスを使用

        _videoSource = New VideoCaptureDevice(MonikerString)
        AddHandler _videoSource.NewFrame, AddressOf Me.Video_NewFrame
        _videoSource.Start()

        'スイッチを使用可能にする
        Button2.Enabled = True
        Button3.Enabled = True
        Button4.Enabled = True
        Button5.Enabled = True
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'USBビデオデバイス停止
        If _videoSource Is Nothing Then
            Return
        End If

        If _videoSource.IsRunning Then
            _videoSource.SignalToStop() 'ビデオデバイスの停止
            _videoSource.WaitForStop() '完全に停止するまで待つ
            _videoSource = Nothing
        End If
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        ' 自身のフォームを閉じる
        Me.Close()
        End
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        ' カウンタ
        Label2.Text = Label2.Text + 1
        '保存先を指定してjpgファぃるに保存する
        Dim ro As String = TextBox1.Text

        Dim dt = DateTime.Now
        formatteddate = dt.ToString("yyyy年MM月dd日hh時mm秒ss分")

        Dim fileName As String = ro + formatteddate + ".jpg"
        Label3.Text = formatteddate

        ' MessageBox.Show(fileName)
        '※ PictureBox1 と PictureBox2 の方法が違うのはなぜ?
        PictureBox1.Image.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg)

        ' 
        ' FileStream を開く
        '※ Stream は using 文を使ってください。
        Dim hStream As New System.IO.FileStream(fileName, System.IO.FileMode.Open)

        ' FileStream から画像を読み込んで表示
        Me.PictureBox2.Image = Image.FromStream(hStream)

        ' FileStream を閉じる (正しくは オブジェクトの破棄を保証する を参照)
        hStream.Close()
    End Sub

    Private Function vrnINPUT() As String
        Throw New NotImplementedException()
    End Function

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        'カウンタ内容を0にリセットする
        Label2.Text = "0"
    End Sub
End Class


> わからんところ↓ビデオデバイスを画像をのComboBox2で
> 選択された2代目カメラPictureBox3出力されないところ。
→
わからないところ↓ComboBox2 で選択された2台目のカメラ
の画像が、PictureBox3 に出力されないところ。


> ここでボタンを押すとComboBox1が例えばaのPictureBox1に接続表示
> で、ComboBox1で選択された2代目がPictureBox3に出力されるようにしたいのですが
> なかなかうまくいかないです。↓
→
ここでボタンを押すと、ComboBox1 に選択されている a のカメラに接続され、
PictureBox1 に表示させたい。また、ComboBox2 で選択されている2台目を、
PictureBox3 に表示させたい。


仕様:
PCに、カメラが2台接続されている。
アプリの画面には、ビデオ映像を表示する箇所(PictureBox)が2つある。
それぞれの PictureBox に表示させるカメラを DropdownList で選ぶ。
ボタンを押すと、選択されているそれぞれのカメラに接続し、画像を表示する。

今できていること:
カメラが1台の時、1つのPictureBox に表示させることはできている。

できていないこと:
2つのカメラに同時に接続する。
 ComboBox1 で選択したカメラを PictureBox1 に表示することしかできていない。
 ComboBox2 で選択したカメラを PictureBox3 に表示させたい。

[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85365 ] / ▼[ 85368 ]
■85366 / 15階層)  Re[15]: カメラ台数を増やす
□投稿者/ Jitta (326回)-(2017/10/15(Sun) 13:01:29)
2017/10/15(Sun) 13:02:04 編集(投稿者)
No85365 (Jitta さん) に返信
間違えた

[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85366 ] / ▼[ 85370 ] ▼[ 85383 ]
■85368 / 16階層)  Re[16]: カメラ台数を増やす
□投稿者/ しろ (34回)-(2017/10/15(Sun) 20:46:23)
No85366 (Jitta さん) に返信

'※ 「接続したカメラからフレームの入力があれば Me.Video_NewFrame を実行するようにする」
'※ 「接続したカメラからの入力を開始する」
'※ です。これが、どのようになればいいのか、コードの前にプログラムを作ってください。
'※ プログラム=何を、どのような順で実行するか、ができなければ、コードは書けません
Jittさんの↓
'※ 「接続したカメラからフレームの入力があれば Me.Video_NewFrame を実行するようにする」
の、どのように実行したらよいのでしょうか?

[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85368 ] / 返信無し
■85370 / 17階層)  Re[17]: カメラ台数を増やす
□投稿者/ Azulean (880回)-(2017/10/15(Sun) 21:50:44)
2017/10/15(Sun) 21:52:31 編集(投稿者)

No85368 (しろ さん) に返信
> Jittさんの↓
> '※ 「接続したカメラからフレームの入力があれば Me.Video_NewFrame を実行するようにする」
> の、どのように実行したらよいのでしょうか?

このコードはどこかからコピペして適当に作っている状態なんですかね?
そうであれば、永遠に完成しないので、Jitta さんの下記の二文を読んで、答えを返してください。

'※ ここから「スイッチを使用可能にする」までの行は、何をしていますか。
'※ その意味を知ってください

それをせずに、丸投げばかりでは、誰も答えてくれなくなるだけですよ。

-----
今の時代、他人のサンプルコードを組み合わせればプログラムは動くかもしれない。
でも、それは「自分で作った」とは言えないし、今回のように、少し機能を改良・拡張しようとしても応用が利かないのでできない。
そういった状況にあるように見えますので、切り貼りするだけでなく、コードの意味を理解する努力をしてください。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85368 ] / 返信無し
■85383 / 17階層)  Re[17]: カメラ台数を増やす
□投稿者/ Jitta (327回)-(2017/10/16(Mon) 21:15:38)
No85368 (しろ さん) に返信
> ■No85366 (Jitta さん) に返信
>
> '※ 「接続したカメラからフレームの入力があれば Me.Video_NewFrame を実行するようにする」
> '※ 「接続したカメラからの入力を開始する」
> '※ です。これが、どのようになればいいのか、コードの前にプログラムを作ってください。
> '※ プログラム=何を、どのような順で実行するか、ができなければ、コードは書けません
> Jittさんの↓
> '※ 「接続したカメラからフレームの入力があれば Me.Video_NewFrame を実行するようにする」
> の、どのように実行したらよいのでしょうか?
>

あなたが引用している行の2行上を読んでください。


何度も書いていますが、あなたがしたいことは何ですか。
あなたの期待と、現在の実行結果の違いは、何ですか。
それを、あなたの言葉で書いてください。

何度も書いていますが、あなたの心の中まで知ることはできません。
あなたが書いていないことを、想像はできても、知ることはできません。
[ 親 85265 / □ Tree ] 返信 編集キー/

▲[ 85364 ] / 返信無し
■85377 / 14階層)  Re[14]: カメラ台数を増やす
□投稿者/ PANG2 (191回)-(2017/10/16(Mon) 14:21:48)
No85364 (しろ さん) に返信
> わからないところ↓ComboBox2 で選択された2台目のカメラ
> の画像が、PictureBox3 に出力されないところ。

「Button1をクリックしたときComboBox2で選択されたカメラの画像をPitureBox3に表示する」部分だけを抽出するとよいです。

(1)プロジェクトをコピー
(2)デザインから ComboBox1, PictureBox1, Button2, Button3, Button4, Button5 コントロールを削除
(3)コードから ComboBox1, PictureBox1, Button2, Button3, Button4, Button5 に関する処理を削除


# バグが再現する最小コードを抽出すると問題が見つけやすい。
[ 親 85265 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -