ポク太郎です。
高圧縮のJPEG画像と非圧縮のBMP画像を取得する関数を作りました。
前者は主に画像ログ用、後者は画像検出用。
後者はUWSCで画像検索を行う場合には正確な画像データでなければ検出できないので、即座にその画像を取得するための関数です。
高圧縮のJPEG画像を得る関数getpic(id)関数
指定されたアプリIDのスクショを“pic_000n.jpg”なるファイル名で実行アプリのあるフォルダに保存します。ファイル名作成のためWHILEループを使って番号を調べています。
FUNCTION getpic(id)//id=0:スクリーン全体取得
n=0
comp=0
WHILE (comp=0)
path=GET_CUR_DIR+"\pic_"+REPLACE(FORMAT(n,4)," ","0")+".jpg"
IF FOPEN(path,F_EXISTS)
n=n+1
ELSE
SAVEIMG(path,id,,,,,,1)
disp("画像を取得しました。","gray")
comp=1
ENDIF
WEND
RESULT=1
FEND
1,15 行目 |
1 15 |
FUNCTION getpic(id)//id=0:スクリーン全体取得 FEND |
getpic(id)関数宣言: 引数id:アプリケーションID(id=0のとき、スクリーン全体を取得) |
||
2,3 行目 |
2 3 |
n=0 comp=0 |
変数初期化 変数n:画像ファイル名として使用するための番号 変数comp:画像ファイルを保存した合図とするフラグ |
||
4,13 行目 |
4 13 |
WHILE (comp=0) WEND |
変数comp=0の間ずっとループするループ文。 取得した画像ファイルのファイル名は“pic_番号”としますが、重複しないファイル名にするためループして探します。セーブ後に変数comp=1にするとループを抜けます。 |
||
5 行目 |
5 | path=GET_CUR_DIR+“\pic_“+REPLACE(FORMAT(n,4),“ “,“0“)+“.jpg“ |
変数pathに画像ファイルのパスを代入。 GET_CUR_DIRは実行アプリのあるパス(UWSCの特殊変数)。 REPLACE(FORMAT(n,4),” “,”0”)は変数nを4桁の文字列に修正する部分。 例. 4→”0004″ |
||
6~12 行目 |
6 7 8 9 10 11 12 |
IF FOPEN(path,F_EXISTS) n=n+1 ELSE SAVEIMG(path,id,,,,,,1) disp(“画像を取得しました。“,“gray“) comp=1 ENDIF |
条件分岐:変数pathのファイルが存在するかどうかの判定。
○⇒:変数nに+1する。 disp()関数はこちら(UWSC|情報の吹き出し表示とクリップボードへ転送する関数)で作成したメッセージ表示の自作関数。(表示不要なら10行を削除してもOK。) |
||
14 行目 |
14 | RESULT=1 |
関数の戻り値として1を返します。 |
非圧縮のBMP画像を得る関数getpic_dialog()関数
劣化してれば当然認識・検出できませんので非劣化のBMP保存。
仕様は、
●動作(ブラウザ画像取得、5秒後に取得、画面全体取得、5秒後に取得)選択ダイアログを出し、
●指定されたアプリIDのスクリーンショットをファイル名“pic_000x.bmp”で実行アプリのあるフォルダに保存。ファイル名作成のためWHILEループで番号を調べています。
FUNCTION getpic_dialog()
quit=0
WHILE (0=0)
SELECT SLCTBOX(slct_btn,0,1,400,"画像を取得します。","取得(ブラウザ画面)","5秒後に取得(ブラウザ画面)","取得(全体)","5秒後に取得(全体)")
CASE -1
quit=1
CASE 1
mode=1
wait5s=0
CASE 2
mode=1
wait5s=1
CASE 4
mode=0
wait5s=0
CASE 8
mode=0
wait5s=1
SELEND
IF quit=1
break
ELSEIF mode=1
bprep()
id=bid(brwz)
ELSE
id=0
ENDIF
IF wait5s=1
FOR i=5 TO 1 step -1
disp(i+"秒後に取得します。","gray")
SLEEP(1)
NEXT
ENDIF
n=0
comp=0
WHILE (comp=0)
path=GET_CUR_DIR+"\pic_"+REPLACE(FORMAT(n,4)," ","0")+".bmp"
IF FOPEN(path,F_EXISTS)
n=n+1
ELSE
SAVEIMG(path,id,,,,,,,0)
disp("画像を取得しました。","gray")
comp=1
ENDIF
WEND
SLEEP(0.01)
WEND
RESULT=1
FEND
1,50 行目 |
1 50 |
FUNCTION getpic_dialog() FEND |
getpic_dialog()関数宣言: ダイアログを表示し、ブラウザ画像、ブラウザ画像(5秒後)、画面全体画像、画面全体画像(5秒後)を選択し、BMP画像を取得する関数。 |
||
2 行目 |
2 | quit=0 |
関数を抜けるフラグ変数quitを初期化。 | ||
3,47~48 行目 |
3 47 48 |
WHILE (0=0) SLEEP(0.01) WEND |
無限ループ。 変数quitが1になることで22行目でループから出ます。 |
||
4~19 行目 |
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SELECT SLCTBOX(slct_btn,0,1,400,“画像を取得します。“,“取得(ブラウザ画面)“,“5秒後に取得(ブラウザ画面)“,“取得(全体)“,“5秒後に取得(全体)“) CASE –1 quit=1 CASE 1 mode=1 wait5s=0 CASE 2 mode=1 wait5s=1 CASE 4 mode=0 wait5s=0 CASE 8 mode=0 wait5s=1 SELEND |
選択ダイアログを表示し、ユーザの入力待ち&押されたボタンによる条件分岐。 ユーザの選択は以下のように返されます。 -1:クローズボックスが選択された 1、2、4、8、16、32、:n番目のボタンが選択された (↑case文で指定する数値は2^nで指定するようです。) UWSC命令:select slctbox(slct_btn,0,1,400,選択肢1,選択肢2)…”選択肢1″,”選択肢2″のボタンのあるダイアログを表示します。 設定している変数は、 |
||
21~28 行目 |
21 22 23 24 25 26 27 28 |
IF quit=1 break ELSEIF mode=1 bprep() id=bid(brwz) ELSE id=0 ENDIF |
4~19行目で設定された変数による条件分岐。 変数quit=1、つまりクローズボックスが選択されたら⇒関数を抜ける(49行目) 変数mode=1、つまりブラウザ画面のみ取得⇒ブラウザ準備とアプリID取得 それ以外、つまり上記以外⇒スクリーン全体画像を取得するため変数idに0を代入 |
||
29~34 行目 |
29 30 31 32 33 34 |
IF wait5s=1 FOR i=5 TO 1 step –1 disp(i+“秒後に取得します。“,“gray“) SLEEP(1) NEXT ENDIF |
変数wait5s=1の場合は、5秒間の待ち時間を入れます。1秒ごとにメッセージを出しながら、待ちます。 UWSC命令:SLEEP(秒数)…秒数の間休止します。 |
||
35,36 行目 |
35 36 |
n=0 comp=0 |
変数初期化 変数n:画像ファイル名として使用するための番号 変数comp:画像ファイルを保存した合図とするフラグ |
||
37,46 行目 |
37 46 |
WHILE (comp=0) WEND |
変数comp=0の間ずっとループするループ文。 取得した画像ファイルのファイル名を決めるため、重複していないファイル名を探すためにループさせます。セーブ後に変数comp=1にするとループを抜けます。 |
||
38 行目 |
38 | path=GET_CUR_DIR+“\pic_“+REPLACE(FORMAT(n,4),“ “,“0“)+“.bmp“ |
変数pathに画像ファイルのパスを代入。 GET_CUR_DIRは実行アプリのあるパス(UWSCの特殊変数)。 REPLACE(FORMAT(n,4),” “,”0”)は変数nを4桁の文字列に修正する部分。 例. 4→”0004″ |
||
39~45 行目 |
39 40 41 42 43 44 45 |
IF FOPEN(path,F_EXISTS) n=n+1 ELSE SAVEIMG(path,id,,,,,,,0) disp(“画像を取得しました。“,“gray“) comp=1 ENDIF |
条件分岐:変数pathのファイルが存在するかどうかの判定。
○⇒:変数nに+1する。 disp()関数はこちら(UWSC|情報の吹き出し表示とクリップボードへ転送する関数)で作成したメッセージ表示の自作関数。(表示不要なら43行を削除してもOK。) |
||
49 行目 |
49 | RESULT=1 |
関数の戻り値として1を返します。 |
関数の形式になっていますが、2~48行目だけを使用して独立した画像取得用アプリにしておいてもいいかもしれません。
BMP画像の幅と高さを得る関数 | 見つけた指定画像の中心座標を返す関数 | 高圧縮jpegと劣化なしbmp画像を取得する関数 | あいまいな画像認識の前に“できない理由”を調べる |
○画像を得る関数
非圧縮のBMP画像を得る関数
コメント