DOBON.NET DOBON.NETプログラミング掲示板過去ログ

連続画像表示中に他の処理が飛んでしまう。

環境/言語:[Windows XP]
分類:[.NET]

VB.NETではまだ初心者ですが、次のような処理でうまくいかず困っています
どなたか、アドバイスいただけないでしょうか。

今やっているのは、連続したJPG画像をパラパラまんがのように2つのピクチャー
ボックスに表示して、その差分を計算しその値をテキストBOXに書き出し、
ある値を越すと、Activexコントロールを使用して警告音を出すようなロジック
です。
何をしているのかと言うと、動体検知の一部なのですが問題は、連続画像表示が
終われば、演算結果や、警告音が実行されているのですが連続画像表示中では
テキストBOXへの書き込みや、警告音の実行がなされていないのです。
もちろん演算結果の表示や・警告音発生は演算結果の後で実行しています。
ピクチャーBOXの表示の後では、ピクチャーBOX.Image=Nothngにて初期化し
次の表示に備えています。
テキストBOXや・警告音のときにもこのような配慮が必要なのでしょうか?
どなたか、ヒントだけでも教えていただけないでしょうか。
宜しくお願いします。
■No3535に返信(ふろふろさんの記事)
> VB.NETではまだ初心者ですが、次のような処理でうまくいかず困っています
> どなたか、アドバイスいただけないでしょうか。
>
> 今やっているのは、連続したJPG画像をパラパラまんがのように2つのピクチャー
> ボックスに表示して、その差分を計算しその値をテキストBOXに書き出し、
> ある値を越すと、Activexコントロールを使用して警告音を出すようなロジック
> です。
二つのPictureBoxをどのように用いているのか、もっと詳しくお願いします。
差分とは何の「差」ですか?

> 何をしているのかと言うと、動体検知の一部なのですが問題は、連続画像表示が
> 終われば、演算結果や、警告音が実行されているのですが連続画像表示中では
> テキストBOXへの書き込みや、警告音の実行がなされていないのです。
一文がちょっと長すぎですね。これでは、理解しづらいです。
言いたい事はこういうことですか?

動体検知の処理を行っている。連続的に画像を表示している間に、
随時テキストボックスへの書き込みをしたり、警告音を出したりできない。
画像の連続表示が終わってから、テキストボックスへの書き込みや、
警告音の発信が行われる。どうしたら、「画像の表示」と「テキストボックスへの書き込み・警告音の発信」の二つを、同時に行えますか?

違いますか?

でしたら、別スレッドで行えばいいのでは?
もしくは、きっとループを起こっているはずですから、一回表示するごとに
テキストボックスへの書き込み処理や、警告音の発信処理を行えばいいのでは?
つまり、「画像の表示・書き込み・発信」を処理の一まとまりにして、
それ全体をループさせるということ。

> もちろん演算結果の表示や・警告音発生は演算結果の後で実行しています。
> ピクチャーBOXの表示の後では、ピクチャーBOX.Image=Nothngにて初期化し
> 次の表示に備えています。
> テキストBOXや・警告音のときにもこのような配慮が必要なのでしょうか?

どんな配慮なのですか?Nothingで初期化すること?

> どなたか、ヒントだけでも教えていただけないでしょうか。
> 宜しくお願いします。
>


全体的にわかりづらい説明ですね。
もう少し、読みやすい・理解しやすい分を書くようにしてください。
■No3539に返信(りょうさんの記事)
> ■No3535に返信(ふろふろさんの記事)
>>VB.NETではまだ初心者ですが、次のような処理でうまくいかず困っています
>>どなたか、アドバイスいただけないでしょうか。
>>
>>今やっているのは、連続したJPG画像をパラパラまんがのように2つのピクチャー
>>ボックスに表示して、その差分を計算しその値をテキストBOXに書き出し、
>>ある値を越すと、Activexコントロールを使用して警告音を出すようなロジック
>>です。
> 二つのPictureBoxをどのように用いているのか、もっと詳しくお願いします。
> 差分とは何の「差」ですか?
>
>>何をしているのかと言うと、動体検知の一部なのですが問題は、連続画像表示が
>>終われば、演算結果や、警告音が実行されているのですが連続画像表示中では
>>テキストBOXへの書き込みや、警告音の実行がなされていないのです。
> 一文がちょっと長すぎですね。これでは、理解しづらいです。
> 言いたい事はこういうことですか?
>
> 動体検知の処理を行っている。連続的に画像を表示している間に、
> 随時テキストボックスへの書き込みをしたり、警告音を出したりできない。
> 画像の連続表示が終わってから、テキストボックスへの書き込みや、
> 警告音の発信が行われる。どうしたら、「画像の表示」と「テキストボックスへの書き込み・警告音の発信」の二つを、同時に行えますか?
>
> 違いますか?
>
> でしたら、別スレッドで行えばいいのでは?
> もしくは、きっとループを起こっているはずですから、一回表示するごとに
> テキストボックスへの書き込み処理や、警告音の発信処理を行えばいいのでは?
> つまり、「画像の表示・書き込み・発信」を処理の一まとまりにして、
> それ全体をループさせるということ。
>
>>もちろん演算結果の表示や・警告音発生は演算結果の後で実行しています。
>>ピクチャーBOXの表示の後では、ピクチャーBOX.Image=Nothngにて初期化し
>>次の表示に備えています。
>>テキストBOXや・警告音のときにもこのような配慮が必要なのでしょうか?
>
> どんな配慮なのですか?Nothingで初期化すること?
>
>>どなたか、ヒントだけでも教えていただけないでしょうか。
>>宜しくお願いします。
>>
>
>
> 全体的にわかりづらい説明ですね。
> もう少し、読みやすい・理解しやすい分を書くようにしてください。

りょう さん わかりにくい質問に早速ご返事いただき有難うございます。
結構複雑な処理をしているので(自分ではそう思っている^^)どこまで説明したらいいか悩んでいます。
 1.ピクチャーBOX1に画像(001.JPG)表示→モノクロ8階調に変換→4x4  ピクセルのモザイク単位で各階層毎の計を求めます。→TEXTBOX1〜8  に代入
  
 2.ピクチャーBOX2に画像(002.JPG)表示以下1とおなじで→TEXTB  OX9〜17に代入

 3.TEXTBOX1〜8−9〜17の絶対値>設定値であればTEXTBOXに "動体検知"と書き込み、警告音発生

 この1〜3のステップを関数として DO Loop の中でCollして繰り 返ています。
 従って、全て直列のロジックですから別スレッドにしなくてもいけると思ってい ます。
 でも、いいヒントがありました、TEXTBOXへの書き込みや、音声発生を
 1〜3の関数の外に出し(フラグでもたてて)DO LOOP内で実行してみます
 簡潔に書こうと思ったのですがよけいややこしくなっしまいすみません。
 
 結果をご報告させて頂きますので今後ともよろしくお願いいたします。
■No3542に返信(ふろふろさんの記事)
> ■No3539に返信(りょうさんの記事)
>>■No3535に返信(ふろふろさんの記事)
>  この1〜3のステップを関数として DO Loop の中でCollして繰り 返ています。
>  従って、全て直列のロジックですから別スレッドにしなくてもいけると思ってい ます。
>  でも、いいヒントがありました、TEXTBOXへの書き込みや、音声発生を
>  1〜3の関数の外に出し(フラグでもたてて)DO LOOP内で実行してみます
>  簡潔に書こうと思ったのですがよけいややこしくなっしまいすみません。
Q.
PictureBox2つに画像を別々に表示して、TextBoxにその差分を表示しようとしています。
また差分が一定以上になると警告を出したいと思っています。
しかし差分を計算している間にTextBoxに出力したり、警告を出そうとしても
うまく出力されません。どうしたらよろしいですか?
差分の計算は関数の中でDo〜Loopを行っています。

A1.DoEventsを使う
Do〜Loopで繰り返している途中にDoEventsを使用する。
当サイトのTipsページ参照
http://dobon.net/vb/dotnet/vb6/doevents.html

A2.スレッドを使う
どぼんさんのメルマガ参照
http://dobon.net/vb/melma/dotnet19.txt〜dotnet26.txt

でよろしいでしょうか?
ちなみにいちばん簡単なのはDoEventsですが、スレッドの方がよさそうですけど。。。
>> この1〜3のステップを関数として DO Loop の中でCollして繰り 返ています。
>> 従って、全て直列のロジックですから別スレッドにしなくてもいけると思ってい ます。
>> でも、いいヒントがありました、TEXTBOXへの書き込みや、音声発生を
>> 1〜3の関数の外に出し(フラグでもたてて)DO LOOP内で実行してみます
>> 簡潔に書こうと思ったのですがよけいややこしくなっしまいすみません。
> Q.
> PictureBox2つに画像を別々に表示して、TextBoxにその差分を表示しようとしています。
> また差分が一定以上になると警告を出したいと思っています。
> しかし差分を計算している間にTextBoxに出力したり、警告を出そうとしても
> うまく出力されません。どうしたらよろしいですか?
> 差分の計算は関数の中でDo〜Loopを行っています。
>
> A1.DoEventsを使う
> Do〜Loopで繰り返している途中にDoEventsを使用する。
> 当サイトのTipsページ参照
> http://dobon.net/vb/dotnet/vb6/doevents.html
>
> A2.スレッドを使う
> どぼんさんのメルマガ参照
> http://dobon.net/vb/melma/dotnet19.txt〜dotnet26.txt
>
> でよろしいでしょうか?
> ちなみにいちばん簡単なのはDoEventsですが、スレッドの方がよさそうですけど。。。
>
りょう さん ありがとうございました。いけました!!
  DoEventsを使用して、TextBOXの表示は正常にできるようにました。
  こんなおまじないがあったとは、まだまだウインドウの仕組みを理解しないとわからないことだらけです。
音声の発生はまだ解決しませんが、これも考えてみれば次々と連続で発生の指示をしてもQ待ちの様な状態になってしまって結局全ての処理の完了後にしか実行されないのだと思います、いくらタイマーをかましても同じことですよね。
これについては、別スレッドで平行処理しか逃げようはないのではないかと考えています。
また、警告音は動体検知のたびにすべきでもないですし。一度注意をうながしてある程度のタイムラグののち再開しようと考えています。
おかげ様で次のステップに進めそうです。ありがとうございました。今後ともよろしくお願いいたします。
■No3561に返信(ふろふろさんの記事)
> >> この1〜3のステップを関数として DO Loop の中でCollして繰り 返ています。
> >> 従って、全て直列のロジックですから別スレッドにしなくてもいけると思ってい ます。
> >> でも、いいヒントがありました、TEXTBOXへの書き込みや、音声発生を
> >> 1〜3の関数の外に出し(フラグでもたてて)DO LOOP内で実行してみます
> >> 簡潔に書こうと思ったのですがよけいややこしくなっしまいすみません。
>>Q.
>>PictureBox2つに画像を別々に表示して、TextBoxにその差分を表示しようとしています。
>>また差分が一定以上になると警告を出したいと思っています。
>>しかし差分を計算している間にTextBoxに出力したり、警告を出そうとしても
>>うまく出力されません。どうしたらよろしいですか?
>>差分の計算は関数の中でDo〜Loopを行っています。
>>
>>A1.DoEventsを使う
>>Do〜Loopで繰り返している途中にDoEventsを使用する。
>>当サイトのTipsページ参照
>>http://dobon.net/vb/dotnet/vb6/doevents.html
>>
>>A2.スレッドを使う
>>どぼんさんのメルマガ参照
>>http://dobon.net/vb/melma/dotnet19.txt〜dotnet26.txt
>>
>>でよろしいでしょうか?
>>ちなみにいちばん簡単なのはDoEventsですが、スレッドの方がよさそうですけど。。。
>>
> りょう さん ありがとうございました。いけました!!
>   DoEventsを使用して、TextBOXの表示は正常にできるようにました。
>   こんなおまじないがあったとは、まだまだウインドウの仕組みを理解しないとわからないことだらけです。
> 音声の発生はまだ解決しませんが、これも考えてみれば次々と連続で発生の指示をしてもQ待ちの様な状態になってしまって結局全ての処理の完了後にしか実行されないのだと思います、いくらタイマーをかましても同じことですよね。
> これについては、別スレッドで平行処理しか逃げようはないのではないかと考えています。
> また、警告音は動体検知のたびにすべきでもないですし。一度注意をうながしてある程度のタイムラグののち再開しようと考えています。
> おかげ様で次のステップに進めそうです。ありがとうございました。今後ともよろしくお願いいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板