まったくの初心者です。よろしくお願いします。
環境はVB6.0 Windows XP です。
1.ディスクトップの一部の画像をキャプチャして
PictureBoxに表示します。
2.PictureBoxの画像をファイル1に保存します。
3.ディスクトップの一部の画像をキャプチャして
PictureBoxに表示します。
4.PictureBoxの画像をファイル2に保存します。
5.ファイル1とファイル2を開いてデータを変数
データ1とデータ2に代入します。
6.データ1とデータ2の内容を比較して画像の変
化を検知しています。
ただし、処理速度の関係で2.と4.と5.を省略
して画像比較が出来ればいいなあと思っていますが
方法がわかりません。
なにか良い方法があればご指導お願いします。
PictureBoxの内容をデータとしてTypeに展開できれ
ば可能なのかなあとも思っていますが・・・・。
その具体的な方法もわかりません。
PictureBoxの画像のデータを2次元配列に高速に抽出する方法はここにのっています。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200704/07040044.txt
てん様ありがとうございます。
早速回答いただきほんとうにありがとうございました。
内容については、かなり時間をかけて理解する必要が
ありそうなので、とりあえず御礼だけでも申し上げな
くてはと、返信いたしました。
要は、参考のリンクの最終レスですよね。
がんばってやってみます。かならずご報告いたします
のでまずは御礼まで。
ご指導いただきました方法が、なかなか自分の物になら
ず苦戦しておりましたところ、
Me.Picture1.Point(x, y)
という便利なものを見つけました。
ScaleModeをピクセルに設定していなかったのでx,y の値
でちょっと苦労しましたが、PictureBoxの指定した場所
の色変化は、完全に捉えることができました。
但しご指導いただいた方法と
For i = 0 to xxxx
For ii = 0 to yyy
TARGET = Me.Picture1.Point(i, ii)
'前回との比較処理
If OLD_TARGET(i,ii) <> TARGET Then
Call 変化検出時の処理
Else
OLD_TARGET(i,ii) = TARGET
End if
Next ii
Next i
の速度の違いはこれから検証してみます。
検証結果で大きな違いがでれば、またご指導い
ただいた方法に挑戦したいと思います。
ご指導ありがとうございました。
ご指導いただいた方法がベストでありました。
配列に代入されてひとつずつを調べるためにForでまわしますが
ご指導いただいた処理で、pixel(x,y)に代入される。
その後、各ピクセルを調べる
For i = 0 to xxxx
For ii = 0 to yyy
TARGET = pixel(i, ii)
'前回との比較処理
If OLD_TARGET(i,ii) <> TARGET Then
Call 変化検出時の処理
Else
OLD_TARGET(i,ii) = TARGET
End if
Next ii
Next i
まったくの初心者で、本当に申し訳ありませんが、
xxxとyyyがいくつに設定してよいかわかりません。
1次元配列の場合Ubound(pixel)などで配列の要素数が
わかるのですが、2次元での方法がわかりません、
何卒よろしくお願いいたします。
見逃していました。
'配列の宣言
ReDim pixel(Picture1.ScaleWidth - 1, Picture1.ScaleHeight - 1) As Long
ですね。
xxx = Picture1.ScaleWidth
yyy = Picture1.ScaleHeight
解決とさせていただきます。
ありがとうございました。
解決チェック忘れてました。
ツイート | ![]() |