Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2017/06/20 (火)

お休み中・・・

| 23:58 | お休み中・・・ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - お休み中・・・ - 雪乃☆雫のなでしこ日和 お休み中・・・ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 訳あって、しばらく平行して遊んでいた、カメラとJuliusは、お休み中となっています。

 わっ訳ですか?! それを聞きますか?!?!(誰も聞いてないよ!)

 まあ・・・話せば長い深い深い事情があって(嘘)・・・・パソコンが変わったんですけど・・・・・のノートにはカメラもマイクも内蔵されてないからなんですよ~。しくしくしく。

 もともと、んな物があるいう認識も無く、長年一度も使ったことの無かった機能だったんだけどさぁ~。

 んなわけで、一旦保留にして、しようがないから純粋にしりとりとかオセロとかについて考えていきましょうかねえ。

 できてしまえばJuliusで音声入力に対応させるの自体は別に難しいことじゃないんで。


 さて・・・

 しりとりはまあ、すぐ出来るだろうとは思うんだよね。

 単語リスト作んのがめんどーになってただけで;;;

 でも、いちおう辞書ユーティリティは、だいたいできていた気がする実際にしりとりしながら学習させれるようにしたらいいんじゃ? ・・・みたいなw


 オセロ(リバーシ)は、昔々の大昔に一度作ったことがあります

 N88-日本語Basicで!(爆)

 してコレも、本のとうりにやったら動いたよ! というだけのことですが;

 しかも、の思考ルーチンたるや、ちょっと評価表で角や辺、星の辺りに重みをつけて、あとは、とにかく石が沢山取れるところを選択というものだったので、何しろ信じられないほど弱かったです。

 だいたい、ものの本によれば石を沢山取っていくとゆうのは最悪の戦法で、序盤なんかは取れる石の少ないところを選んでいった方がまだマシという感じらしいんですよ。

 まあ、当時はパソコン自体遅かったので、強いオセロのプログラムはモノスゴク遅かった;

 人の長考は平気でも、こんぴゅーたーのそれは待てないっていうのは、一体なぜなんだろう・・・

 ともかくーゆうわけなので、こはまったく一から考え直さなければなりません。

 でも、ワタシ自体が弱すぎなんで、どうかなあ?

 しかも、結局いまだに、ミニもマックスもアルファもベータもよくわからなんだ;;;


 それにしても、んなムカシからプログラムっぽいコトして遊んでいたのに、本のとうりじゃないプログラムができるようになったのは、なでしこが初なんだよね!

 して、そうしたら、以前に本のとうりに作ったプログラムの意味も、分かるようになった。

 まさに神だね!!(≧▽≦)

めだかめだか2017/06/26 08:01お久しぶりですぅぅぅ

パソコンかえましたかーwいいですねw

とか言ってますが、実は自分もかえました(笑
後は、自分でジャンクを漁ってきたりして組み立てとかしてます(笑


なので、全く同じ状況となります。カメラないです(泣
前のノートがないわけではないですが、今はディスクトップのみ使っている状態ですねー...悲しい←


でですが、壁紙に動画を設定できたら面白そうと思って調べるとめんどくさそうなのばっかだったんで、自分で作ろう!となったわけですが、プログラムの流れとしては...

動画再生

画面内キャプチャ

そのイメージを壁紙として設定


という、流れです。

やはり、キャプチャの部分でかなりのラグが出来てしまいますかね...?
枠なしウィンドウでどうにかして再生するっていう方法しか思いつきませんですた\(^o^)/

違和感なく動画を壁紙にするいい方法はないでしょうかね...w

雪乃☆雫雪乃☆雫2017/06/27 04:21 お久しぶりでした~。
 いやいや、パソコン変えたと言っても、事件あるいは事故なので、ちっともいいことありません。しくしく。

 それはそうと、パソコン起動中ずっと窓内側キャプチャ→壁紙設定を延々ループし続けるってことですかΣ(゜д゜;
 キャプチャの部分でラグとかいう問題以前に、モノスゴク負荷が掛かりませんかね(涙)
 それと、こうゆう用途に、窓内側キャプチャはまったく使えないと思いますよ。
 遅いとか以前に、この命令って文字通り、目的の窓の内側をそのままキャプチャするヤツなんで、動画を再生しているウィンドウを小さくしたら、その分しかキャプチャされないし、そのウィンドウの上に、別のウィンドウやタスクバーなんかがかぶると、それも一緒にキャプチャされてしまうので。
 カメラの時に窓内側キャプチャを見捨てたのは、ワタシ個人のことで言えば、主にそっちの問題でした;

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170620

2017/04/21 (金)

フルスクリーンにしたい!2

| 16:35 | フルスクリーンにしたい!2 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - フルスクリーンにしたい!2 - 雪乃☆雫のなでしこ日和 フルスクリーンにしたい!2 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 以前、出来そうな気はしてたけど、着手しなかった、APIによるフルスクリーン。

 「SetWindowLong」とゆうので、ウィンドウスタイルの設定が出来るようなので、やってみます。

#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411203.aspx
●SetWindowLong(hWnd,nIndex,dwNewLong) =DLL("user32.dll",
"LONG SetWindowLongA(
  HWND hWnd,       // ウィンドウのハンドル
  int nIndex,      // 設定する値のオフセット
  LONG dwNewLong   // 新しい値
)")
#-----------------------------------------------------------

 設定する値の・・・おふせっとってなんすか;;;

 ・・・どんなデータを書き換えるかを、まずここで指定するってコトらしい。

 どんなデータが書き換えられんのかとゆうと・・・MSDNに色々書いてあっても、何のことやらさっぱりわからない;・・・けど、とりあえずウィンドウスタイルを設定するには「GWL_STYLE」を指定すればよさそう

 GWL_STYLE=-16のようです。

 相変わらず、英語版にだけ値が載ってるとかヤメテ><

https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms633591(v=vs.85).aspx


 そうして、最後の「新しい値」の部分に、「WS_VISIBLE」的なフラグを設定していく。

 論理和でねwww

https://msdn.microsoft.com/ja-jp/library/czada357.aspx

https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms632600(v=vs.85).aspx


#-----------------------------------------------------------
!GWL_STYLEとは整数=-16     # ウィンドウスタイル
●窓ハンドルスタイル設定(ハンドルをスタイルに)
  SetWindowLong(ハンドル,GWL_STYLE,スタイル)

母艦のハンドルをWS_VISIBLEに窓ハンドルスタイル設定。
#-----------------------------------------------------------

 これで行けるかと思ったら、行かなかった。

 MSDNをようく読むと・・・

ウィンドウデータの中には、キャッシュされており、SetWindowLong 関数を使って
変更しても SetWindowPos 関数を呼び出すまでは有効にならないものもあります。
特に、フレームスタイルを変更した場合は、SWP_FRAMECHANGED フラグをセットして
 SetWindowPos 関数を呼び出すさなければ、キャッシュが正しく更新されません。

 ・・・なんて?ヽ(;´Д`)ノ

 ようするに、SetWindowLongでウィンドウの属性を変更しても、SetWindowPos関数を呼んで反映させるまでは、変更されない・・・的な。

 ここで、前フルスクリーンをやった時に、なんだか分かんないから取りあえず無視した「ウィンドウ位置のオプション」が発生。ここに「SWP_FRAMECHANGED」を指定するとゆうことのようです。

 どうやら、SWP_FRAMECHANGED=$20のようです。

https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms633545(v=vs.85).aspx

#-----------------------------------------------------------
!GWL_STYLEとは整数=-16     # ウィンドウスタイル
!SWP_FRAMECHANGEDとは整数=$20  # SetWindowLong関数を使用後に新しいフレームスタイルの設定を適用
●窓ハンドルスタイル設定(ハンドルを{数値=0}X,{数値=0}Y,{数値=0}W,{数値=0}Hでスタイルに)
  SetWindowLong(ハンドル,GWL_STYLE,スタイル)
  SetWindowPos(ハンドル,0,X,Y,W,H,SWP_FRAMECHANGED)
  # SetWindowLongによるウィンドウの属性変更を反映させるには、SetWindowPosでSWP_FRAMECHANGEDを指定して反映させる必要ある。
#-----------------------------------------------------------

 できた!

 でもこれは、なでしこ標準のスタイル設定とは併用出来ないもよう。

 なんで、「枠固定」のウィンドウも、SetWindowLongを使って設定してやらなければならない

 何も無いウィンドウにフラグを追加して、足していくイメージ

 最大化ボタンや最小化ボタンはわざわざ外していたくらいだから、このくらいで行けそう

!WS_VISIBLEとは整数=$10000000  # 初期状態(枠なし)で表示。
!WS_CAPTIONとは整数=$C00000   # タイトルバーを持つ。
!WS_SYSMENUとは整数=$80000   # システムメニューボタン母艦のハンドルを0,0,640,480でWS_VISIBLE||WS_CAPTION||WS_SYSMENUに窓ハンドルスタイル設定。

 できた♪

#窓ハンドルスタイル設定
#-----------------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦黒色画面クリア母艦枠固定中央表示。
2秒待つ母艦枠無全画面表示。
2秒待つ母艦枠固定中央表示。
#-----------------------------------------------------------
!WS_VISIBLEとは整数=$10000000  # 初期状態(枠なし)で表示。
!WS_DISABLEDとは整数=$8000000    # 初期状態で非表示。
!WS_CAPTIONとは整数=$C00000   # タイトルバーを持つ
!WS_SYSMENUとは整数=$80000   # システムメニューボタン母艦枠固定中央表示
  母艦の可視はオフ。
  母艦ハンドルをWS_DISABLED||WS_CAPTION||WS_SYSMENUに窓ハンドルスタイル設定。
  母艦のクライアント幅は640。母艦のクライアント高さは480。
    母艦ハンドルを(デスクトップW-母艦の幅)/2,(デスクトップH-母艦の高さ)/2,母艦の幅,母艦の高さでWS_VISIBLE||WS_CAPTION||WS_SYSMENUに窓ハンドルスタイル設定。
  母艦の可視はオン。  #オンにしなくてもウィンドウは表示されるけど、タスクバー表示されなくなる!

*母艦枠無全画面表示
  母艦の可視はオフ。
  母艦ハンドルを0,0,デスクトップW,デスクトップHでWS_VISIBLEに窓ハンドルスタイル設定。
  母艦の可視はオン。
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411203.aspx
●SetWindowLong(hWnd,nIndex,dwNewLong) =DLL("user32.dll",
"LONG SetWindowLongA(
  HWND hWnd,       // ウィンドウのハンドル
  int nIndex,      // 設定する値のオフセット
  LONG dwNewLong   // 新しい値
)")

!GWL_STYLEとは整数=-16     # ウィンドウスタイル
!SWP_FRAMECHANGEDとは整数=$20  # SetWindowLong関数を使用後に新しいフレームスタイルの設定を適用
●窓ハンドルスタイル設定(ハンドルを{数値=0}X,{数値=0}Y,{数値=0}W,{数値=0}Hでスタイルに)
  SetWindowLong(ハンドル,GWL_STYLE,スタイル)
  SetWindowPos(ハンドル,0,X,Y,W,H,SWP_FRAMECHANGED)
    # SetWindowLongでウィンドウスタイルを変更した後は、SetWindowPosでSWP_FRAMECHANGEDを指定して反映させる必要ある。
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411206.aspx
●SetWindowPos(hWnd,hWndInsertAfter,X,Y,cx,cy,uFlags) =DLL("user32.dll",
"BOOL SetWindowPos(
HWND hWnd,             // ウィンドウのハンドル
HWND hWndInsertAfter,  // 配置順序のハンドル…?
int X,                 // 横方向の位置
int Y,                 // 縦方向の位置
int cx,                // 幅
int cy,                // 高さ
UINT uFlags            // ウィンドウ位置のオプション
)")

●窓ハンドル位置サイズ設定(ハンドルをX,Y,W,Hに)
  SetWindowPos(ハンドル,0,X,Y,W,H,0)
#-----------------------------------------------------------

※重要!(ワタシ的にw)

 クライアント幅、クライアント高さでウィンドウのサイズを設定したい場合、まずウィンドウスタイルを変更してから設定しないと、枠幅やタイトルバー分サイズがずれてしまう。

母艦枠固定中央表示
  母艦のクライアント幅は640。母艦のクライアント高さは480。
  母艦ハンドルを(デスクトップW-母艦の幅)/2,(デスクトップH-母艦の高さ)/2,母艦の幅,母艦の高さでWS_VISIBLE||WS_CAPTION||WS_SYSMENUに窓ハンドルスタイル設定。
  母艦の可視はオン

 コレじゃダメだったんです。

 API的には、SetWindowLongでスタイル設定後にSetWindowPosでサイズを設定しているんだけど、やっぱりSWP_FRAMECHANGEDするまでは見た目だけじゃ無く反映されてないようで、母艦の幅と高さは元のウィンドウのサイズのままなので、このあとクライアント幅、クライアント高さを言わせると、サイズが変わってしまっている。

 (枠なしからの場合、タイトルバー分があるから顕著だけど、枠可変から枠固定の場合も、枠の幅がちょこっと違うんだよね、コレが;)

 さらに、最初からVISIBLEに設定すると、クライアント幅と高さを設定した時に、違う位置にチラッと見えてしまうため、なんだかムダっぽいけど一旦非表示でスタイルだけ設定した後、再び位置サイズとともにVISIBLEにしてみている。

 の場合、母艦の可視はオフを入れないと、全画面からウィンドウ表示戻る時、全画面の表示が残って(?)おかしなことになるみたい。

(なんでのようにしたんだったか、後からすぐ忘れるので、このように記しておく(爆))

 何か、もっと、無駄の無い手立てがあるかなあ・・・?

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170421

2017/04/18 (火)

監視カメラ的な?

| 16:55 | 監視カメラ的な? - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 監視カメラ的な? - 雪乃☆雫のなでしこ日和 監視カメラ的な? - 雪乃☆雫のなでしこ日和 のブックマークコメント

 昨日の続きです。

 とりあえずコレもお試しだけど、なんかこんな感じ?

 感度値は、値が大きい方が感度が高そうな気がしてしまうけど、実際はが少ない方が感度が良いというわけで、知恵の足りないワタシはいちいちコンランしまくり(バカ;)・・・のため、0~100で設定できるよーにした(爆)


 んなコトはさておき、精度は10でも5でも、侵入者wを発見して撮影することはできた。

 でも結局、いちいち静止画保存されるのも実際のところはめーわくなので、BEEPにしてあるwww

 こんな精度だと、侵入者は発見できても、まばたきなんかは全く検出しないと思ってたんだけど、日中だと太陽光効果か(屋内だけど)結構検出できるみたい。

 自然って素晴らしい!(違;)


 ちなみにこれまで、静止画保存ようの画像を取得するイメージ部品を「処理用」としてましたが、「保存用」に変更。

 処理用は、動いたピクセルを点描画するために使用することに。

#監視カメラ的な?

#-----宣言--------------------------------------------------
CW幅とは整数=640。CW高さとは整数=480。
CWハンドルとは整数=-1  #キャプチャーウィンドウのハンドル。
#---ウィンドウスタイル定数-----
!WS_VISIBLEとは整数=$10000000  #(初期状態)
!WS_CHILDとは整数=$40000000   #(子ウィンドウ)
CWスタイルとは整数=WS_VISIBLE||WS_CHILD  #キャプチャーウィンドウのスタイル

カメラ接続状態とは整数オフ。
フレームレートとは整数=60      #ミリ秒単位

精度=10
精度=精度/100
感度値=80
感度値=(255/100*(100-感度値))を切り下げ
閾値=50
閾値=(CW幅*精度*CW高さ*精度)/1000*閾値を切り下げ

#---GUI-----
保存用とはイメージの可視はオフ。

Tとはタイマーの値はフレームレート。
の時満ちた時は~画像比較。

動体検知モニターとはフォームこれについて
  可視はオン。
  スタイルは「枠固定」
  オフに最大化ボタン有効変更。
  タイトルは「動体検知的な?」
  クライアント幅はCW幅。
  クライアント高さはCW高さ。

処理用とはイメージこれについて
  可視はオフ。
  幅はCW幅*精度。
  高さはCW高さ*精度。

裏画面とはイメージこれについて
  可視はオフ。
  幅はCW幅。
  高さはCW高さ。

表示用とはイメージこれについて
  可視はオン。
  親部品は動体検知モニター。
  幅はCW幅。
  高さはCW高さ。
  位置は「0,0」
表示用を黒色画面クリア。

2
  比較用[回数-1]をイメージとして作成。
  比較用[回数-1]→可視はオフ。
  比較用[回数-1]→位置は「0,0」
  比較用[回数-1]→幅はCW幅。
  比較用[回数-1]→高さはCW高さ。

#---母艦-----
母艦について
  スタイルは「枠固定」
  オフに最大化ボタン有効変更。
  タイトルは「PCカメラキャプチャー」
  位置は「10,10」
  クライアント幅はCW幅。
  クライアント高さはCW高さ。
  閉じた時は~
    終了処理。
  キー押した時は~
    もし、押された仮想キー=13ならば、動体検知モニターの可視はオン。  # Enter
母艦黒色画面クリア。
動体検知モニターの位置は母艦の右側。
#-----------------------------------------------------------

#-----メイン------------------------------------------------
カメラ起動。
C=-1。Tを開始。
#-----------------------------------------------------------
*カメラ起動
  キャプチャーウィンドウ作成("",CWスタイル,0,0,CW幅,CW高さ,母艦のハンドル,0)
  CWハンドルはそれ。1秒待つ。
  5
    CWハンドルにカメラ接続。
    1秒待つ。
    もしそれはいならば、カメラ接続状態はオン抜ける。
  もし、カメラ接続状態がオフならば、
    CWハンドルをウィンドウ破棄。
    「カメラに接続出来ませんでした」と言う。
    終わる。
  CWハンドルをフレームレートにプレビューレート設定。
  CWハンドルをオンにプレビューモード設定。

*静止画保存
  ファイル名は「{今日} {}」を「yyyymmdd_hhnnss」に日時形式変換。
  ファイル名は「{デスクトップ}{ファイル名}.png」
  CWハンドルをクリップボードコピー。
  保存用の画像は「クリップボード」
  保存用をファイル名へ画像保存。

*終了処理
  CWハンドルからカメラ切断。
  CWハンドルをウィンドウ破棄。
  終わる。
#-----------------------------------------------------------
*画像比較
  C=C+1。D=0。I=0。
  CWハンドルをクリップボードコピー。
  比較用[C%2]→画像は「クリップボード」。
  比較用[C%2]を画像グレイスケール。
  比較用[C%2]をCW幅*精度,CW高さ*精度へ画像高速リサイズ。
  yで0からCW高さ*精度-1まで繰り返す。
    xで0からCW幅*精度-1まで繰り返す。
      比較用[C%2]のx,yから画像色取得。
      P¥(C%2),D=それ/$10000を切り下げ。
      もし、C=0でなければ、
        もし、((P\0,D)-(P\1,D))の絶対値>感度値ならば、
          I=I+1。
          処理用のx,yへ赤色点描画。
      D=D+1。
  もし、I>閾値ならばBEEP。//静止画保存。
  もし、動体検知モニターの可視=オンならば、モニター表示。

*モニター表示
  裏画面の画像は「クリップボード」
  処理用をCW幅,CW高さへ画像高速リサイズ。
  処理用を裏画面の0,0へ画像合成。
  表示用の画像は「裏画面」
  処理用をCW幅*精度,CW高さ*精度へ画像高速リサイズ。
  処理用を黒色画面クリア。
#-----------------------------------------------------------

#-----ビデオキャプチャー------------------------------------
#https://msdn.microsoft.com/en-us/library/windows/desktop/dd757696(v=vs.85).aspx
#---VFW定数-----
!WM_CAP_DRIVER_CONNECTとは整数=$400+10           # キャプチャウィンドウをキャプチャドライバに接続します。
!WM_CAP_DRIVER_DISCONNECTとは整数=$400+11        # キャプチャウィンドウからキャプチャドライバを切断します。
!WM_CAP_SET_PREVIEWとは整数=$400+50              # プレビューモード(オンオフ)
!WM_CAP_SET_PREVIEWRATEとは整数=$400+52          # プレビューモードのフレーム表示レート(ミリ秒)
!WM_CAP_SET_SCALEとは整数=$400+53                # 画像をキャプチャーウィンドウに合わせて拡縮(オンオフ)
!WM_CAP_SEQUENCEとは整数=$400+62                 # ストリーミングビデオおよびオーディオキャプチャをファイルに開始します。
!WM_CAP_FILE_SET_CAPTURE_FILEとは整数=$400+20    # ビデオキャプチャに使用されるファイルの名前を指定します。
!WM_CAP_EDIT_COPY=$400+30                        # 画面をクリップボードコピー。
#-----------------------------------------------------------
●カメラ接続(ハンドルに{数値=0}Noの)
  メッセージ送信(ハンドル,WM_CAP_DRIVER_CONNECT,No,0)  # カメラが1台ならNoは0でOK

●カメラ切断(ハンドルから)
  メッセージ送信(ハンドル,WM_CAP_DRIVER_DISCONNECT,0,0)

●プレビューレート設定(ハンドルをmsに)
  メッセージ送信(ハンドル,WM_CAP_SET_PREVIEWRATE,ms,0)  # ms=ミリ秒単位

●プレビューモード設定(ハンドルをfに)
  メッセージ送信(ハンドル,WM_CAP_SET_PREVIEW,f,0)     # f=オンオフ

●キャプチャ開始(ハンドルを)
  メッセージ送信(ハンドル,WM_CAP_SEQUENCE,0,0)

●キャプチャファイル設定(ハンドルをaviファイル名に)
  メッセージ送信(ハンドル,WM_CAP_FILE_SET_CAPTURE_FILE,0,aviファイル名)

●スケーリングフラグ設定(ハンドルをfに)
  メッセージ送信(ハンドル,WM_CAP_SET_SCALE,f,0)      # f=オンオフクリップボードコピー(ハンドルを)
  メッセージ送信(ハンドル,WM_CAP_EDIT_COPY,0,0)
#-----------------------------------------------------------

#-----API---------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc428606.aspx
●キャプチャーウィンドウ作成(lpszWindowName,dwStyle,x,y,nWidth,nHeight,hWnd,nID) =DLL("avicap32.dll",
"HWND capCreateCaptureWindowA(
LPCSTR lpszWindowName,  // ウィンドウ名
DWORD dwStyle,          // ウィンドウスタイル
int x,                  // X
int y,                  // Y
int nWidth,             // W
int nHeight,            // H
HWND hWnd,              // 親ウィンドウのハンドル
int nID                 // ウィンドウ識別子…ってなんすか;
)")
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411022.aspx
●メッセージ送信(hWnd,Msg,wParam,lParam) =DLL("user32.dll",
"LRESULT SendMessageA(
HWND hWnd,      // 送信先ウィンドウのハンドル
UINT Msg,       // メッセージ
SHORT wParam,  // メッセージの最初のパラメータ
LPCSTR lParam   // メッセージの 2 番目のパラメータ
)")
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc410763.aspx
●ウィンドウ破棄(hWndを) =DLL("user32.dll",
"BOOL DestroyWindow(
HWND hWnd   // 破棄するウィンドウのハンドル
)")
#-----------------------------------------------------------

 うーん、この監視機能と、こないだのダイアログを加えて、あと、やっぱり現行のなでしこでもちゃんとフルスクリーンするようにAPIに直して、バージョン3かなぁ~♪

めだかめだか2017/04/24 01:17お久しゅう振りですw
なんか私より進んでません!?
私は、最近忙しすぎて出来てないんですよw


このプログラムを見る限り、私の野望の方が大きいです(笑
組んでるプログラム自体は、私の方がもっと簡単ですけどw

ところで、複数の検出は、速度やプログラム的にも可能だと思いますか?
複数の検出というのが、ただ、値以上を塗るではなく、ある程度の塊(背景誤差を検出しないものとする)での検出です。要は、両手を出して、両手とも上手いこと検出するかな?ですw
で、これなんですが、あまり深くは考えてないですが、ひょっとして不可能なのでは?と薄々思っています。

もし、可能でも、速度はとてもではないですが、実用的なものにはならないなと思っています。
そもそも、なでしこはGUI関連に弱いため、なでしこの高速は他言語で言うところの普通ぐらいでしょう...

これはあくまで、現段階の私の組んでいるプログラムをもとに考えたことなので一概には言えませんが、どう思いますか?

雪乃☆雫雪乃☆雫2017/04/24 17:01 めだかさん、こんにちは☆
 いや、まったく進んでません!w
 一番当初のお話しが顔認識・・・とゆうことだったので、こんなこっちゃぁないんだろうなってのは端から分かっていたのですが、なにぶんワタシの知恵ではこの程度;
 前に、画像はどの程度縮小して出来るか・・・というお話をしたので、速度的にはどんなもんだかを、実際お試ししてみようと思いついてちょっとやってみた結果、なんとかかんとかこーなったのですが・・・こりゃー予想通りとゆーかなんとゆーか、なかなか厳しくて参ったね>< と言う結果となりました。

 というわけで(?)現状ワタシの理解がまずここまでのレベルなもんで、どのようにも考えようがないんですけれどもねー;;;
 しかし、複数の検出とゆうのは、たとえば顔認識で言えば、複数人物がいた場合には、当然人数分検出しなけりゃならん、というようなことですよね・・??
 世の中にそのようなプログラムがある以上、速度のことは取りあえず置くとすれば、なでしこでも不可能ってことはあるまいと思ったり思わなかったりするところなのですが・・・何しろその方法が分かりませぬ~(@_@)

 しかし、とにかく最大の問題は速度なんですよね。
 他言語の普通というのがどのくらいなもんなのかも、ワタシにはちょっと分かりません。
 がっ・・・これは、なでしこのGUIが・・・とかいう以前の問題のように思います。
 なんにもせよ、画像色取得では、どうにも・・・ヽ(;´Д`)ノ

めだかめだか2017/04/24 21:26こにゃにゃちわ~

今日!久々にPC起動ですw

ほんとですよねぇ・・・やはり「速度」が問題ですね・・・それに、PC自体もスペックはいい方ではないので、そこからつまずきです・・・
とは、言えど、プログラムの可能性は無限大ですので、何かしらの解決策があるはず・・・!だと、思っていますw

そですね。
http://nonbiri-tereka.hatenablog.com/entry/2015/05/13/063713
「顔 検出 複数」での検索結果で1番上に来たやつが思っている奴が具現化されたものだったので、URLを載せておきます。こんな感じです。

他言語では、0.5秒以下の実行速度だったかな?そんぐらいは出しておかないと普通とは言えないとかいう話です・・・恐ろしい・・・

何か画像色取得以外の命令はないものか考え中です・・・

雪乃☆雫雪乃☆雫2017/04/25 00:23そうそうOpenCVですねー。
顔認識とかで検索すると、大体これ系ばかりヒットしてくるので、OpenCV自体がよくわからんもので、どうにもこうにも・・・(+_+)
画像の色を高速に取得するについては、ワタシが愚考するに、APIで直接ビットマップをどうにかしなきゃないと思うんだよね。
調べてないし、深くも考えてないし、可能かどうかすらよく分からんけど、やるとしたらおそらく、こーぞーたいで、ぽいんたぁで・・・うきゃぁぁヽ(;´Д`)ノ
・・・て感じかと思われます;;;

めだかめだか2017/04/25 21:08画像関連だと、OpenCVが一番有名というか、無難という感じですね(笑

私も他言語についてはさっぱりなので、もうやめて~状態ですTT

これ以上複雑なものはやだーって思ったのが一番です。てへへw

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170418

2017/04/17 (月)

画像色取得が遅いよー(ToT)・・・とゆう話し(?)

| 09:32 | 画像色取得が遅いよー(ToT)・・・とゆう話し(?) - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 画像色取得が遅いよー(ToT)・・・とゆう話し(?) - 雪乃☆雫のなでしこ日和 画像色取得が遅いよー(ToT)・・・とゆう話し(?) - 雪乃☆雫のなでしこ日和 のブックマークコメント

 何気に触発されて、動体検知的なことを調べてみたのだけれど・・・

 ・・・なんだかさっぱり分からないヽ(;´Д`)ノ

 それでも、画素値分検出ってゆうのは、なんとかワタシの知恵でもできそうだ。

http://www2.wisnet.ne.jp/~daddy/LC3/CaptureAlgorithm.html

 定期的に静止画を取得して、の画像からピクセルごと色を取得して、前後の画像を比較。色が違っていたら、のピクセルは動いたよってことだね。

 出来そうだけど、画像色取得点取得)や点描画が遅すぎて、死にたくなる予感。

 以前、ノベルを作ってた時に、記事にはなってないけど、アルファ値付きのマスクでの合成が出来ないかと思って試作したんだけども、あまりの遅さに挫折したんだよね。

 なにしろ640*480の画像で、20~30秒もかかるんだもん!

 この問題と、セーブデータの仕様を考えるのがめんどーってゆうのが、ノベルに飽きちゃった原因ですかね;;;

(いやむしろ、完成させたところで、絵も描けなけりゃ文章も書けんだろ! って事実に気付いちゃった・・・w)


 それはさておき、動体検知です。

 方針としては、

1,タイマーして、クリップボードコピーでフレームを取得。

2,それを、イメージ0とイメージ1に、交互に振り分ける。

3,イメージからピクセルごと画像色取得して、値を配列に保持。

4,イメージ0とイメージ1の値を比較。

 ・・・的な?

 して、

5,感度値とゆうのを設定して、それよりが大きければ、のピクセルを検知と認定するらしい。

 動いていない背景も、ようく見たら結構ちらつきがあって、全く色が変化してないわけじゃないから、幅を持たすんだね。

6,閾値を設定して、検知となったピクセル数が閾値をえたら、の画像は動いたよと判断する。

 コレでちょこっと、監視カメラっぽい機能を搭載してみようと思う。

 よくある、動くモノが映ったらシャッターを切ったり、メールで送ったり、録画を保存したりする的なコトだね。とりあえず簡単に、静止画保存を呼び出す感じで。


 さらに・・・加えて、動いたところをモニターしたい(?)とゆう野望なのです。

 それをリアルタイムでやろうとすると、コレがまた予想どうりなかなかキビシイ。

 たぶんだけど、なでしこの点取得画像色取得)と点描画は、WindowsAPIのGetPixelとSetPixelが元になってると思われ、コレ自体が遅いとゆう評判なので、もはやどうしようもないっぽいんですよね~(--;

 何か、他に手立ては無いのかなあ・・・

 とりあえず、画像色取得でやるとすると、高速化するには画像を縮小してピクセル数を減らすしかない

 3の前にイメージを縮小するとして、縮小すると精度が下がる。速度を取るか、精度を取るかの二択・・・でもないけど、妥協点を見いださなきゃならいって話になる。

 これは、縮小率を色々変えて、お試ししてみるしかないね。

#-----------------------------------------------------------
精度=20
精度=精度/100

動体検知モニターとはフォームこれについて
  可視はオン。
  スタイルは「枠固定」
  オフに最大化ボタン有効変更。
  タイトルは「動体検知的な?」
  クライアント幅はCW幅。
  クライアント高さはCW高さ。

表示用とはイメージこれについて
  可視はオン。
  親部品は動体検知モニター。
  幅はCW幅。
  高さはCW高さ。
  位置は「0,0」
表示用を黒色画面クリア。

2
  比較用[回数-1]をイメージとして作成。
  比較用[回数-1]→可視はオフ。
  比較用[回数-1]→位置は「0,0」
  比較用[回数-1]→幅はCW幅。
  比較用[回数-1]→高さはCW高さ。

Tとはタイマーの値はフレームレート。
の時満ちた時は~
  C=C+1。D=0。
  CWハンドルをクリップボードコピー。
  比較用[C%2]→画像は「クリップボード」。
  比較用[C%2]を画像グレイスケール。
  比較用[C%2]をCW幅*精度,CW高さ*精度へ画像高速リサイズ。
  yで0からCW高さ*精度-1まで繰り返す。
    xで0からCW幅*精度-1まで繰り返す。
      比較用[C%2]のx,yから画像色取得。
      P¥(C%2),D=それ/$10000を切り下げ。
      D=D+1。
  表示用の画像は「クリップボード」。
#-----------------------------------------------------------

 精度は、何パーセントまで画像を縮小するかの値となってます。

 うーん、画像色取得を終えて、単にクリップボードの画像を表に転送しているだけなんだけどね~。

 ストレス無く動くと言ったらせいぜい20%・・・(´д`;

 リアルタイム感を出そうと思ったら、10%とか・・・Σ(゜д゜;

 の上、動いたピクセルに点描画かなんかすることを考えたら・・・あああ(ToT)

 点描画より四角の方が早いなんてオチはないよね?(汗)

 いや、どっちにしても、画像色取得が最大のネックなんだから、しようがない


 しかしまー、動いたよ→静止画保存・・・くらいなら、出来そう感があるんで、とりあえずはそれかな;;;

 この場合は、細かい動きは無視して、大きく動くものを侵入者(?!)としてとらえるわけだから、ちっちゃこい画像からの検出でもいけそう(たぶん)

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170417

2017/04/15 (土)

ステータスをゲットしてみる

| 14:37 | ステータスをゲットしてみる - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - ステータスをゲットしてみる - 雪乃☆雫のなでしこ日和 ステータスをゲットしてみる - 雪乃☆雫のなでしこ日和 のブックマークコメント

 実際に、キャプチャーウィンドウのステータスをゲットしてみる。

 同じようにやれば出来るハズ~・・・なんだけど、なかなかそうは問屋が卸さなかった><;


 さて、CAPSTATUS構造体は、何だかわからんものが多いけど、とりあえず幅と高さしか使う予定無いから、他の部分はコピペしただけ~;

 でもたぶんここは問題ないはず。

#https://msdn.microsoft.com/en-us/library/windows/desktop/dd756939(v=vs.85).aspx
■CAPSTATUS
 ・幅
 ・高さ
 ・fLiveWindow
 ・fOverlayWindow
 ・fScale
 ・ptScroll
 ・fUsingDefaultPalette
 ・fAudioHardware
 ・fCapFileExists
 ・dwCurrentVideoFrame
 ・dwCurrentVideoFramesDropped
 ・dwCurrentWaveSamples
 ・dwCurrentTimeElapsedMS
 ・hPalCurrent
 ・fCapturingNow
 ・dwReturn
 ・wNumVideoAllocated
 ・wNumAudioAllocated

 しかし、まずは早くもPACKエラー発生(´д`;

PACK(CAPSTATUS,S,"UINT,UINT,BOOL,BOOL,BOOL,POINT,BOOL,BOOL,BOOL,DWORD,DWORD,DWORD,DWORD,HPALETTE,BOOL,DWORD,UINT,UINT")

 エラーの内容としては、こんな感じ。

[エラー] 6,ステータスをゲットしてみる.nako.bak(233): 関数UNPACK』の
実行中にエラーが起きました。PACK規則の設定に失敗。構造体の定義エラー
「POINT」は未定義(関数)

 これまた意味も分からずコピペしてきただけだもんね~。

 でも、UINTやらBOOLなどもなでしこで使える型に単純置換してくれるらしいコトだったので、このままで行けるかと思ったのにぃ~。

https://nadesi.com/doc/system/sys-1-DLL-WindowsAPI.htm#head1

 PナントカはPOINTERにとゆうことだったので、

PACK(CAPSTATUS,S,"UINT,UINT,BOOL,BOOL,BOOL,POINTER,BOOL,BOOL,BOOL,DWORD,DWORD,DWORD,DWORD,HPALETTE,BOOL,DWORD,UINT,UINT")

 としてみたら、通ったっぽい。

 次にいよいよ「WM_CAP_GET_STATUS」のメッセージを送信しようとしたところ、またまた、GetWindowRectの時にはなかった問題が発生。

#https://msdn.microsoft.com/en-us/library/windows/desktop/dd743906
!WM_CAP_GET_STATUS=$400+54         # キャプチャウィンドウのステータスを取得します。

 二つ目のパラメーターは、同様に「POINTER(S)」でいいとして・・・

 一つ目のパラメーター「sで参照される構造体のサイズ(バイト単位)」・・・ってなんすかヽ(;´Д`)ノ

 C(?)とかだと「sizeof」なる関数があって取得出来るらしいんだけど・・・ああ、マジックナンバーってそうゆうことか・・・

(だんだんナゾな独り合点が多くなっていきますが、気にしないで!www)

 コレはどうやら、SHORTが2バイトであったり、DWORDやLONGが4バイトであったり、LONGLONGが8バイト・・・的なコトの合計らしい。

 とりあえず・・・大は小を兼ねるのかどうかすら分からんけど、仮に144とか入れてみる。

メッセージ送信(ハンドル,WM_CAP_GET_STATUS,144,POINTER(S))    # Size=バイト単位。S=CAPSTATUS構造体へのポインタ。

 ところが度は、UNPACKのところでエラーが出てしまう。

[エラー] 6,ステータスをゲットしてみる.nako.bak(233): 関数UNPACK』の
実行中にエラーが起きました。PACK変数代入失敗。モジュール 'dnako.dll'
 のアドレス 0228B034 でアドレス 00000000 に対する読み込み違反がおきました。(関数)

 読込違反とか、マジでキライさ! 何言ってんのか分かんないんだもんヽ(;´Д`)ノ

 しかし、「PACK変数代入失敗」とか言ってるので・・・またまた型の指定とかなのか。PACKでは通ったのに、まだダメなんすか。

 だいたい、もの型の意味がわかんないから、9種類のうちのどれに置換されてんのかも分からん;

 もー半ばヤケで、

UNPACK(S,CAPSTATUS,"long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long")

 こんなことしてみたら、なんと動いた! えー;;;

 動いたことだし、このままでもいいかと思ったんだけど(こら;)、いちおういっこいっこ、どれが良くないのか確認してみたら、またもや6番目のPOINTERだった。えええ~??

 やっぱ、ぽいんたぁはキモンなのか。

 鬼門には近づきたくないので、深く追求せず、このようにしておく(爆)

UNPACK(S,CAPSTATUS,"UINT,UINT,BOOL,BOOL,BOOL,long,BOOL,BOOL,BOOL,DWORD,DWORD,DWORD,DWORD,HPALETTE,BOOL,DWORD,UINT,UINT")

 まあ・・・いちおうコレでステータスは取得でき、キャプチャーウィンドウの幅と高さが分かるようになりました。

 ところで、全部LONGで行けるのなら、マジックナンバーは18*4=72で良いのではないかと思ったんだけどダメで、ステータスが0になってしまった。むむむ~;

 地道に1づつ手動で(爆)増やしていってみたところ、76で行けました。

 でっ、とりあえずこんな感じ。

#-----------------------------------------------------------
CWとはCAPSTATUS。
CWハンドルのステータス取得。
#-----------------------------------------------------------
!WM_CAP_GET_STATUS=$400+54         # キャプチャウィンドウのステータスを取得します。
●ステータス取得(ハンドルの)
  PACK(CW,S,"UINT,UINT,BOOL,BOOL,BOOL,POINTER,BOOL,BOOL,BOOL,DWORD,DWORD,DWORD,DWORD,HPALETTE,BOOL,DWORD,UINT,UINT")
  メッセージ送信(ハンドル,WM_CAP_GET_STATUS,76,POINTER(S))    # Size=バイト単位。S=CAPSTATUS構造体へのポインタ。
  UNPACK(S,CW,"UINT,UINT,BOOL,BOOL,BOOL,long,BOOL,BOOL,BOOL,DWORD,DWORD,DWORD,DWORD,HPALETTE,BOOL,DWORD,UINT,UINT")
#-----------------------------------------------------------

 ここまでくれば、あとはそれ母艦に反映してやるだけ。

#-----------------------------------------------------------
*ウィンドウサイズ設定
  CWハンドルのステータス取得。
  母艦のクライアント幅はCWの幅
  母艦のクライアント高さはCWの高さ
  母艦中央移動。
#-----------------------------------------------------------

 起動時と、ビデオ形式のダイアログを開いた後に、ウィンドウサイズ設定してやればOK。

#-----------------------------------------------------------
!WM_CAP_DLG_VIDEOFORMAT=$400+41    # ビデオ形式を選択できるダイアログボックスが表示されます。
●ビデオ形式ダイアログ
  メッセージ送信(CWハンドル,WM_CAP_DLG_VIDEOFORMAT,0,0)
  ウィンドウサイズ設定。
  CWハンドルに0,0,母艦のクライアント幅,母艦のクライアント高さを窓ハンドル位置サイズ設定。
#-----------------------------------------------------------

 ・・・なんかまたまた大事なことを棚上げした気がするけど、ここまで><;

うぇいくうぇいく2017/04/15 21:18念のため。

https://msdn.microsoft.com/ja-jp/library/8kk2sy33.aspx
(型名まで日本語に訳されてしまっているのは誤訳。)

POINTは、構造体を用いた型で、2つのlongにより座標を折らわすのに使われます。
(RECTが四角を表す構造体を用いた型)

ポインターなら、LPRECTや、LPPOINTのように、元の型名の前にLPを付けた型名になっているはずです。
(LPはlong pointerの略。たぶん。)

雪乃☆雫雪乃☆雫2017/04/16 00:21うぇいくさま、ありがとうございます~!!
POINTとPOINTERは違ったんですね(^▽^;
おおぉ、そして、おかげさまでナゾが一つ解明しました。
なんで72じゃなく76になるのかさっぱり分からんと思っていたのですが、longが二つ分だったのですね!
それにしても、構造体の中にまたこーぞーたい・・・あああ(@_@)

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170415

2017/04/12 (水)

こーぞーたいを学ぶよ!

| 20:52 | こーぞーたいを学ぶよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - こーぞーたいを学ぶよ! - 雪乃☆雫のなでしこ日和 こーぞーたいを学ぶよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 こーぞーたいだのぽいんたあだのって・・・なんかソレ系は、非常に敷居が高い気がして、なるべく避けて通るようにしていた命題なんですが・・・

 なんでいきなりーゆうことになったかと言うと、例のカメラですね。

 またちょっと目をしながらVFWのメッセージを眺めていて・・・

 ちょっと、ダイアログを出してみたわけですよ。これは、取りあえず送れば出る簡単なメッセージなので。

 出せるダイアログは、「VIDEOFORMAT(ビデオ形式)」「VIDEOSOURCE(ビデオソース)」「VIDEODISPLAYT(ビデオ出力)」「VIDEOCOMPRESSION(圧縮器)」の4種類あって、実際に出せるかどうかは、カメラに依存しているラシイです。

#-----------------------------------------------------------
!WM_CAP_DLG_VIDEOFORMAT=$400+41
●ビデオ形式ダイアログ(ハンドルで)
  メッセージ送信(ハンドル,WM_CAP_DLG_VIDEOFORMAT,0,0)

!WM_CAP_DLG_VIDEOSOURCE=$400+42
●ビデオソースダイアログ(ハンドルで)
  メッセージ送信(ハンドル,WM_CAP_DLG_VIDEOSOURCE,0,0)

!WM_CAP_DLG_VIDEODISPLAY=$400+43
●ビデオ出力ダイアログ(ハンドルで)
  メッセージ送信(ハンドル,WM_CAP_DLG_VIDEODISPLAYT,0,0)

!WM_CAP_DLG_VIDEOCOMPRESSION=$400+46
●圧縮器ダイアログ(ハンドルで)
  メッセージ送信(ハンドル,WM_CAP_DLG_VIDEOCOMPRESSION,0,0)
#-----------------------------------------------------------

 うちで出せたのは、ビデオ出力を除く3種類で、しかし、圧縮器とは何なのか全く分からないので無視するとして(えっ)ビデオ形式や、ビデオソースは、(別に使わないけど)ちょっとあると、本物っぽくて(?)いいかなあと思ったのが運の尽き!

 ビデオソースの方は、特に問題ありません(たぶん)

 問題は、ビデオ形式で、解像度が変えられるわけなんだけど・・・ビデオの解像度は変わりますが、当然のことながら、母艦のサイズは変わらないので、640*480の母艦の左上に、ちっちゃこいビデオ映像が表示されるとゆーことになってしまいます。

 ビデオ形式ダイアログで解像度を変更したら、変更したキャプチャーウィンドウのサイズを、母艦のサイズに反映しなくちゃいけません。

 しかも、この解像度変更は、プログラムを終了しても元に戻らんので、次起動時も見事にの状態で、起動して来ちゃうんですよね><

 起動時の母艦のサイズも、本当は、640*480で決め打ちではダメで、キャプチャーウィンドウのサイズに合わせてやらなくちゃいけなかったんです。

 ちょっと現実逃避しようと思って別のコトしたら、こっちでもまたキビシイ現実に直面するとゆう、いつものパターン><

(ちょっとリバーシについて考えはじめたのが違いの元ってゆう・・・ミニだかマックスだかアルファだかベータだか、なんかもーわけ分からんヽ(;´Д`)ノ ・・・やっぱ初心で、とりあえずはしりとりかな;)


 さてこでのキャプチャーウィンドウのサイズを知るには、「WM_CAP_GET_STATUS」で、キャプチャーウィンドウのステータスをゲットしなくちゃいけない。一体どこからゲットするかというと、「CAPSTATUS」とゆう構造体からだよって話なんです。

 winAPIでなんかかんかする場合、SETする系はたいてい、ちゃんと送りさえすればこちらが特に意識しなくても値をセットしてくれて動くんだけど、GETするにはどうやら構造体から逃れられないっぽいため、これまではつとめてGETしないよう心がけていたのです(なにそれ;)

 だって、も、こーぞーたいってなんすか・・・。しくしくしく。


 うっすらと分かっているのは、

・目的の構造体と同じ構成の、なでしこのグループを作る。
・PACKグループを構造体にする。→APIで操作。
・UNPACKで構造体をグループにする。→なでしこで操作。

 ・・・的な???

 以前やったジョイパッドを使うAPIのプログラムで使われていて、何の呪文だかさっぱり分からんと思い調べた結果、こんな感じラシイと分かったものの、理解するには到らなかったんです;;;

 しかしまーワタシも近頃は色々ひらめいて、だいぶ賢くなってきてますからっ!

 コレを使って、以前スクリーンセーバーの時に、なんだか分からんと無視した「GetWindowRect」をやってみようと思う。

 ばいなりしゅとくやかくほはいまだよく分からないけど、とりあえずPACKUNPACKで同じコトができーな気がしてきた☆

#-----------------------------------------------------------
#まずはGetWindowRectを使えるようにする。
#https://msdn.microsoft.com/ja-jp/library/cc364769.aspx
#指定されたウィンドウの左上端と右下端の座標をスクリーン座標で取得します。
#スクリーン座標は、表示画面の左上端が (0,0) となります。
#-----------------------------------------------------------
●WinRect取得(hWnd,lpRect)=DLL("user32.dll",
"BOOL GetWindowRect(
HWND hWnd,      // ウィンドウのハンドル
LPRECT lpRect   // ウィンドウの座標値
)")

#-----------------------------------------------------------
#構造体の内容でグループを作る。
#https://msdn.microsoft.com/ja-jp/library/a5ch4fda.aspx
#-----------------------------------------------------------
■WinRect
 ・左
 ・上
 ・右
 ・下

#-----------------------------------------------------------
#グループを構造体に。
#(型ってのがまた、ひとつ分からんケド、これはLONGラシイ。)
#-----------------------------------------------------------
PACK(WinRect,S,"LONG,LONG,LONG,LONG")

#-----------------------------------------------------------
#引数は、パックした構造体へのポインター。
#(変数Aの保持している生データへのポインタ・・・なんて言われても
#ぜんっぜんわかんないけど、深く考えず「POINTER」を使えばOK;)
#-----------------------------------------------------------
WinRect取得(母艦のハンドル,POINTER(S))
それ言う。  # 関数成功すると、0 以外の値が返ります。関数失敗すると、0 が返ります。

#-----------------------------------------------------------
#構造体をグループに。
#-----------------------------------------------------------
UNPACK(S,WinRect,"LONG,LONG,LONG,LONG")

#-----------------------------------------------------------
#(WinRectの右-WinRectの左)と(WinRectの下-WinRectの上)が
#母艦の幅と高さと同一ならば、正しく取得されており成功です。
#-----------------------------------------------------------
母艦の幅を表示母艦の高さを表示改行表示。
(WinRectの右-WinRectの左)を表示。
(WinRectの下-WinRectの上)を表示改行表示。

#ちなみに、「の」でも「.」でもイイっぽい。
WinRectの左を表示。
WinRect.上を表示。
WinRectの右を表示。
WinRect.下を表示。
#-----------------------------------------------------------

 でっ、できた!!(喜)

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170412

2017/04/04 (火)

画面をクリップボードにコピー

| 15:55 | 画面をクリップボードにコピー - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 画面をクリップボードにコピー - 雪乃☆雫のなでしこ日和 画面をクリップボードにコピー - 雪乃☆雫のなでしこ日和 のブックマークコメント

 これまで、カメラの映像の静止画を取得するために使っていた窓内側キャプチャですが、コレがどうもなかなかの遅さですね。

 ワタシは別に、リアルタイムの処理を行おうとかしてないから、困らないけどねw

 でも、速度はともかく、窓内側キャプチャだと、フルスクリーンにしている時に行うと、の画面に合わせて引き延ばされた画像が保存されてしまうんだよね。

 の方がイイという場面もあるかも知れないけど、どっちかっていうと、拡縮やトリミングは後からでも出来ることだから、本来のとうりの絵を取れた方がよさげ。

 なにしろレターボックスにしてたら、の枠まで入っちゃうんだもんね;

 さてこで発見してきたのが、画面をクリップボードコピーするメッセージ。

 正確には「ビデオフレームバッファと関連するパレットの内容をクリップボードコピーします。」とゆうことなんだけど、なんだかよく分からん;

 でも取りあえずコレで、キャプチャーウィンドウの内容がクリップボードに入り、ペイントとかに貼り付けることも出来ました!

#-----------------------------------------------------------
!WM_CAP_EDIT_COPY=$400+30    # 画面をクリップボードコピー。
●クリップボードコピー(ハンドルを)
  メッセージ送信(ハンドル,WM_CAP_EDIT_COPY,0,0)
#-----------------------------------------------------------

 クリップボードの画像をイメージ部品に取得するのは、イメージ部品の画像を「クリップボード」と指定します。(「」が必要

#-----------------------------------------------------------
*静止画保存
  ファイル名は「{今日} {}」を「yyyymmdd_hhnnss」に日時形式変換。
  ファイル名は「{デスクトップ}{ファイル名}.png」
  CWハンドルをクリップボードコピー。
  処理用の画像は「クリップボード」
  処理用をファイル名へ画像保存。
#-----------------------------------------------------------

 一見これまでと同じように動作しますが、フルスクリーンの場合には、元のキャプチャーウィンドウのサイズどうりの静止画が保存されるようになりました。

 して、どうやらこっちの方が、かなり高速な印象。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170404

2017/03/31 (金)

ウィンドウスタイルの設定で大間違いを犯していたラシイ・・・

| 00:51 | ウィンドウスタイルの設定で大間違いを犯していたラシイ・・・ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - ウィンドウスタイルの設定で大間違いを犯していたラシイ・・・ - 雪乃☆雫のなでしこ日和 ウィンドウスタイルの設定で大間違いを犯していたラシイ・・・ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 カメラのプログラムを見返していて・・・とんだことに気が付きました。

 ウィンドウスタイルのフラグ?を設定するについて、盛大な勘違いをしていたっぽいです(汗)

 とりあえず、このよーに指定していたわけですが・・・

!WS_VISIBLEとは整数=$10000000  #(初期状態)
!WS_CHILDとは整数=$40000000   #(子ウィンドウ)
CWスタイルとは整数=WS_VISIBLE+WS_CHILD  #キャプチャーウィンドウのスタイル

 元ネタのコードを見ていたらね、なんと「+」ではなく「OR」でした!

 「和」ではなく「論理和」。日本語で言ったら「または」。

× CWスタイルとは整数=WS_VISIBLE+WS_CHILD
  ↓ ↓ ↓
○ CWスタイルとは整数=WS_VISIBLE||WS_CHILD

 マニュアルによると「||」が「OR」のコトらしく「(WS_VISIBLE)OR(WS_CHILD)」と同じことです。

 つーか、も論理和って何?

 またはって言ったら、どっちかってことじゃないんすか><


 ちなみに・・・

 「WS_VISIBLE+WS_CHILD」と「WS_VISIBLE||WS_CHILD」

 答えはどちらも「$50000000」となり、それゆえ特に問題は起こりません。

 では、一体何が違うのか。

 てゆうかだから、論理和って一体なんなの?!


マニュアル→(ハ)機能の紹介→計算→論理演算のための演算子

https://nadesi.com/doc/reference/syntax/1-7-calc.htm#head4

 さらっと「比較式Aがまたは比較式Bがならば(=1)を返し、違えば(=0)を返します。」なんて言われてもね。

 なでしこは、初心者向けかと思いきや、マニュアルは「のくらいはフツー知ってるよね」くらいの感じでスルーされているので、ワタシのよーにプログラムの基本のキの字も知らない人は、こんな些細なことで、いちいちまごまごしてしまう><


機能→機能/論理演算→あなたは論理演算がわかりますか?(ITPro)

http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20020731/1/

 むむむぅ、こんなのが5分で分かる人の頭脳が、むしろ信じられんね(´д`;


 さて、5時くらいかけて(嘘)、なんとなく理解したところによると・・・

 とりあえず、まず第一にこの計算は、二進数によってとりおこなわれるってことです。コンピューターなんで!

 して、日本語の「または」にとらわれすぎると、なんだかよく分かんなくなる。

 ようするに、どれかいっこでも1だったら、1

 逆に言うと、ぜんぶ0だった場合だけ、0

 したがって、繰り上がらない!!

 でっ・・・

 「1 OR 4」を、二進数にし、このルールに則って縦計すると、

    0000 0001
OR  0000 0100
-------------
    0000 0101

 8ビットにすれとかなんとか書いてたから、いちおうのように。

 答えは5で、一見足し算の結果と同じみたいだけど、足し算と違うのは、「1 OR 1=1」だってこと。

 「1+4+1」の答えは6ですが、「1 OROR 1」の答えは、5です。

    0000 0001
    0000 0100
OR  0000 0001
-------------
    0000 0101

 この効用は、アレですかねー。

 もし違えて、フラグを「WS_CHILD||WS_VISIBLE||WS_CHILD」みたいに重複して設定してしまっても無視されて、あらぬ値が設定されて大変大変!とゆう事件にならない的な?

 いやたぶん、もっと他にも深遠な意味があるんだろうけど。


 ああぁ、AnimateWindowのアニメーションの種類なんかも、みんなそうだったんだ・・・

 時ある時、コソッと直;;;


 明日になったら、またなんだかよく分からなくなってるかもしないので(えっ;)、このように書き残しておく。

 してまた、もしかしてもしかしたら、おんなじようにまごまごする人がいないとも限らないので、恥も外聞も無く、発表しておく><

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170331

2017/02/11 (土)

PCカメラキャプチャー Ver.2 だよ!

| 00:18 | PCカメラキャプチャー Ver.2 だよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - PCカメラキャプチャー Ver.2 だよ! - 雪乃☆雫のなでしこ日和 PCカメラキャプチャー Ver.2 だよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 フルスクリーンのモードについては、レターボックスも、縦横比固定で拡大するのも、特に問題も無くカンタンに実装出来ました。

 とゆうわけで、スペースキーでフルスクリーン表示とウィンドウ表示をトグルするようにした他、右クリックメニューを付けて、モードの変更ができるようにしました。

 このくらいできたら、単に画面にカメラの映像を出して、「おぉ!♪」とか言ってるくらいの、ワタシなんかの実用には十分なんじゃないですかね?

 旧版のなでしこでは、枠なしのフルスクリーンも問題なく動くようなので、これで実行ファイル化しておこうっと。

 珍しく、実用の物を作った気がする(爆)

 いや~、おかげさまでカメラでは、ずいぶん遊んで、まただいぶ賢くなったね☆

#-----------------------------------------------------------------------
# なでしこでノート内蔵カメラをキャプチャ ver.2.00
#-----------------------------------------------------------------------
#☆ver.1.00
#・ノートPCの内蔵カメラを起動してキャプチャ(プレビュー)
#・Enterキーでキャプチャ画像を保存(勝手にデスクトップの日時でファイル作ります)
#-----------------------------------------------------------------------
#☆ver.2.00
#・[F5]キーでキャプチャ動画を保存([Esc]キーか、マウスボタンを押すことで保存終了)
#・[Space]キーで、フルスクリーン表示とウィンドウ表示切り替え。
#・右クリックメニュー追加。各機能の他、フルスクリーンモードが変えられます。
#-----------------------------------------------------------------------
!母艦設計=「母艦の可視はオフ」

#-----宣言--------------------------------------------------
枠無フルスクリーンとは整数オフ  #古いなでしこならオンで動きます(1.5332で確認)

CW幅とは整数=640。CW高さとは整数=480。
CWハンドルとは整数=-1  #キャプチャーウィンドウのハンドル。

!WS_VISIBLEとは整数=$10000000  #(初期状態)
!WS_CHILDとは整数=$40000000   #(子ウィンドウ)
CWスタイルとは整数=WS_VISIBLE+WS_CHILD  #キャプチャーウィンドウのスタイル

カメラ接続状態とは整数オフ。
フレームレートとは整数=60      #ミリ秒単位
フルスクリーン表示フラグとは整数オフ。
フルスクリーンモードとは整数=1
#(0=デスクトップに合わせて引き延ばす、1=レターボックス、2=縦横比固定でズーム)

#---GUI-----
処理用とはイメージの可視はオフ。
#-----------------------------------------------------------

#-----母艦設計----------------------------------------------
#---ポップアップメニュー----
右クリックメニューとはポップアップメニュー
右クリックメニューに『#親部品名,部品名,テキスト,ショートカット,オプション,イベント
 -,フルスクリーンメニュー,フルスクリーンモード,,,
 --,フルスクリーン0,ノーマル,,,0にフルスクリーンモード変更
 --,フルスクリーン1,レターボックス(縦横比固定),,チェック,1にフルスクリーンモード変更
 --,フルスクリーン2,ズーム(縦横比固定),,,2にフルスクリーンモード変更
 -,ウィンドウメニュー,ウィンドウ表示,,,ウィンドウ表示
 -,-,,,,
 -,静止画保存メニュー,スクリーンショット保存,,,静止画保存。
 -,-,,,,
 -,動画保存メニュー,キャプチャ動画保存,,,動画保存。
 -,動画保存コメント, (終了は[Esc]かマウスクリック),,,
 -,-,,,,
 -,ヘルプメニュー,操作説明,,,操作説明。
 -,バージョンメニュー,バージョン情報,,,バージョン。
 -,-,,,,
 -,メニュー閉,メニューを閉じる,,,
 -,-,,,,
 -,終了メニュー,終了,,,終了処理。
』をポップアップメニュー一括作成

*フルスクリーンモード変更(Aに)
  もし、A=1ならば、
    フルスクリーンモード=1。
    フルスクリーン0のチェックオフ。フルスクリーン1のチェックオン。フルスクリーン2のチェックオフ。
  違えばもし、A=2ならば、
    フルスクリーンモード=2。
    フルスクリーン0のチェックオフ。フルスクリーン1のチェックオフ。フルスクリーン2のチェックオン。
  違えば、
    フルスクリーンモード=0。
    フルスクリーン0のチェックオン。フルスクリーン1のチェックオフ。フルスクリーン2のチェックオフ。
  フルスクリーン表示フラグ=オフ。
  フルスクリーン表示。

*ウィンドウ表示
  フルスクリーン表示フラグ=オン。
  フルスクリーン表示。

#---母艦-----
母艦について
  スタイルは「枠固定」
  オフに最大化ボタン有効変更。
  オフに最小化ボタン有効変更。
  タイトルは「PCカメラキャプチャー」
  クライアント幅はCW幅。
  クライアント高さはCW高さ。
  ポップアップメニューは右クリックメニュー。
  閉じた時は~
    終了処理。
  キー押した時は~
    もし、押された仮想キー=13ならば、静止画保存。  # Enter
    違えばもし、押された仮想キー=116ならば、動画保存。  # F5
    違えばもし、押された仮想キー=32ならば、フルスクリーン表示。  # Space
    違えばもし、押された仮想キー=112ならば、操作説明。  # F1
    違えばもし、押された仮想キー=113ならばバージョン。  # F2
母艦黒色画面クリア母艦中央移動。
#-----------------------------------------------------------

#-----メイン------------------------------------------------
母艦の可視はオン
カメラ起動

#-----------------------------------------------------------
*カメラ起動
  キャプチャーウィンドウ作成("",CWスタイル,0,0,CW幅,CW高さ,母艦のハンドル,0)
  CWハンドルはそれ。1秒待つ。
  5
    CWハンドルにカメラ接続。
    1秒待つ。
    もしそれはいならば、カメラ接続状態はオン抜ける。
  もし、カメラ接続状態がオフならば、
    CWハンドルをウィンドウ破棄。
    「カメラに接続出来ませんでした」と言う。
    終わる。
  CWハンドルをフレームレートにプレビューレート設定。
  CWハンドルをオンにプレビューモード設定。

*静止画保存
  ファイル名は「{今日} {}」を「yyyymmdd_hhnnss」に日時形式変換。
  ファイル名は「{デスクトップ}{ファイル名}.png」
  CWハンドルを処理用へ窓内側キャプチャ。
  処理用をファイル名へ画像保存。

*動画保存
  ファイル名は「{今日} {}」を「yyyymmdd_hhnnss」に日時形式変換。
  ファイル名は「{デスクトップ}{ファイル名}.avi」
  CWハンドルをファイル名にキャプチャファイル設定。
  CWハンドルをキャプチャ開始。

*フルスクリーン表示
  もし、フルスクリーン表示フラグ=オフならば、
    フルスクリーン表示フラグ=オン
    母艦のクライアント幅はデスクトップW母艦のクライアント高さはデスクトップH。
    もし、枠無フルスクリーン=オンならば、
      母艦のスタイルは「枠なし」
      母艦の位置は「0,0」
    違えば、
      母艦中央移動。
    もし、フルスクリーンモード=1ならば、
      CWハンドルに(母艦のクライアント幅-(母艦のクライアント高さ*CW幅/CW高さ))/2,0,(母艦のクライアント高さ*CW幅/CW高さ),母艦のクライアント高さを窓ハンドル位置サイズ設定。
    違えばもし、フルスクリーンモード=2ならば、
      CWハンドルに0,(母艦のクライアント高さ-(母艦のクライアント幅*CW高さ/CW幅))/2,母艦のクライアント幅,(母艦のクライアント幅*CW高さ/CW幅)を窓ハンドル位置サイズ設定。
    違えば、
      CWハンドルに0,0,母艦のクライアント幅,母艦のクライアント高さを窓ハンドル位置サイズ設定。
    母艦最前面
  違えば、
    フルスクリーン表示フラグ=オフ
    母艦のスタイルは「枠固定」
    母艦のクライアント幅はCW幅。母艦のクライアント高さはCW高さ。
    母艦中央移動。
    CWハンドルに0,0,母艦のクライアント幅,母艦のクライアント高さを窓ハンドル位置サイズ設定。
  処理用を母艦のクライアント幅,母艦のクライアント高さで画像リサイズ。
  CWハンドルをフルスクリーン表示フラグにスケーリングフラグ設定。

*終了処理
  CWハンドルからカメラ切断。
  CWハンドルをウィンドウ破棄。
  終わる。
#-----------------------------------------------------------
*操作説明
  ダイアログタイトルは「操作説明」
  「◆[Enter]キーでキャプチャ画面のスナップショットを保存。
  
◆[F5]キーでキャプチャ動画を保存。
 [Esc]キーか、マウスボタンを押すことで保存終了となります。
 ※終了させない限り、録画し続けます。
 
◆[Space]キーで、フルスクリーン表示。
 フルスクリーン表示時に[Space]キーで、ウィンドウ表示戻る。
 
◎フルスクリーンモードは、右クリックメニューで変更できます。
 ・ノーマル(デスクトップに合わせて映像を引き延ばします)
 ・レターボックス(縦横比固定。左右に黒枠が入ります)
 ・ズーム(縦横比固定。上下を切ってデスクトップ一杯に表示)
 ※設定ファイルは作ってないので、毎初期値に戻ります。」と言う
#------------------------------------------------------------
*バージョン
  ダイアログタイトルは「バージョン情報」
  「{二重カッコ}PCカメラキャプチャー{二重カッコ閉じ}{改行}   Version 2.00{改行}{改行}   by 雪乃☆雫」と言う。
#-----------------------------------------------------------

#-----ビデオキャプチャー------------------------------------
#https://msdn.microsoft.com/en-us/library/windows/desktop/dd757696(v=vs.85).aspx
#---VFW定数-----
!WM_CAP_DRIVER_CONNECTとは整数=$400+10           # キャプチャウィンドウをキャプチャドライバに接続します。
!WM_CAP_DRIVER_DISCONNECTとは整数=$400+11        # キャプチャウィンドウからキャプチャドライバを切断します。
!WM_CAP_SET_PREVIEWとは整数=$400+50              # プレビューモード(オンオフ)
!WM_CAP_SET_PREVIEWRATEとは整数=$400+52          # プレビューモードのフレーム表示レート(ミリ秒)
!WM_CAP_SET_SCALEとは整数=$400+53                # 画像をキャプチャーウィンドウに合わせて拡縮(オンオフ)
!WM_CAP_SEQUENCEとは整数=$400+62                 # ストリーミングビデオおよびオーディオキャプチャをファイルに開始します。
!WM_CAP_FILE_SET_CAPTURE_FILEとは整数=$400+20    # ビデオキャプチャに使用されるファイルの名前を指定します。
#-----------------------------------------------------------
●カメラ接続(ハンドルに{数値=0}Noの)
  メッセージ送信(ハンドル,WM_CAP_DRIVER_CONNECT,No,0)  # カメラが1台ならNoは0で省略可。

●カメラ切断(ハンドルから)
  メッセージ送信(ハンドル,WM_CAP_DRIVER_DISCONNECT,0,0)

●プレビューレート設定(ハンドルをmsに)
  メッセージ送信(ハンドル,WM_CAP_SET_PREVIEWRATE,ms,0)  # ms=ミリ秒単位

●プレビューモード設定(ハンドルをfに)
  メッセージ送信(ハンドル,WM_CAP_SET_PREVIEW,f,0)     # f=オンオフ

●キャプチャ開始(ハンドルを)
  メッセージ送信(ハンドル,WM_CAP_SEQUENCE,0,0)

●キャプチャファイル設定(ハンドルをaviファイル名に)
  メッセージ送信(ハンドル,WM_CAP_FILE_SET_CAPTURE_FILE,0,aviファイル名)

●スケーリングフラグ設定(ハンドルをfに)
  メッセージ送信(ハンドル,WM_CAP_SET_SCALE,f,0)      # f=オンオフ
#-----------------------------------------------------------

#-----API---------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc428606.aspx
●キャプチャーウィンドウ作成(lpszWindowName,dwStyle,x,y,nWidth,nHeight,hWnd,nID) =DLL("avicap32.dll",
"HWND capCreateCaptureWindowA(
LPCSTR lpszWindowName,  // ウィンドウ名
DWORD dwStyle,          // ウィンドウスタイル
int x,                  // X
int y,                  // Y
int nWidth,             // W
int nHeight,            // H
HWND hWnd,              // 親ウィンドウのハンドル
int nID                 // ウィンドウ識別子…ってなんすか;
)")
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411022.aspx
●メッセージ送信(hWnd,Msg,wParam,lParam) =DLL("user32.dll",
"LRESULT SendMessageA(
HWND hWnd,      // 送信先ウィンドウのハンドル
UINT Msg,       // メッセージ
SHORT wParam,  // メッセージの最初のパラメータ
LPCSTR lParam   // メッセージの 2 番目のパラメータ
)")
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc410763.aspx
●ウィンドウ破棄(hWndを) =DLL("user32.dll",
"BOOL DestroyWindow(
HWND hWnd   // 破棄するウィンドウのハンドル
)")
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411206.aspx
●SetWindowPos(hWnd,hWndInsertAfter,X,Y,cx,cy,uFlags) =DLL("user32.dll",
"BOOL SetWindowPos(
HWND hWnd,             // ウィンドウのハンドル
HWND hWndInsertAfter,  // 配置順序のハンドル…?
int X,                 // 横方向の位置
int Y,                 // 縦方向の位置
int cx,                // 幅
int cy,                // 高さ
UINT uFlags            // ウィンドウ位置のオプション
)")

●窓ハンドル位置サイズ設定(ハンドルにX,Y,W,Hを)
  SetWindowPos(ハンドル,0,X,Y,W,H,0)
#-----------------------------------------------------------

めだかめだか2017/02/12 02:09ご無沙汰しております。

開いてびっくり!謎のコードがびっしりw
さすがです・・・!
自分で組んだコードでも、後から見返した時に何を書いているのかさっぱりなのに、人様が書いたコードとなるともうさっぱりですねw

ですが、なんとなく理解は...しているつもりですw


ところで、検出プログラムなんですが、なんとなくはできた・・・?のですが、その方法以外が思い浮かばないので、なんとも言えない状態です・・・w
さて、どうしませうか・・・

雪乃☆雫雪乃☆雫2017/02/15 00:53 めだかさんこんにちは。遅くなりましてスミマセン;

 VFW関係のメッセージ送信を、全部関数にして書き換えましたw
 もちろんナゾの呪文は使わず、例の数値を直接指定しても動くんだけど、まさにその、時間が経ってから見返したりするコトを考えると、この呪文で検索するとMSDNとかにたどり着けるので、結局のところ可視性が上がるのかなあと思い、基本英語は見てるだけでダメな人なんですが、使っとくことにしました;;;

 顔検出なんて、その方法もどの方法も、考えたこともないもねー。すごいなあと感心するばかりですよ~。
 是非頑張ってくださいぃ~☆

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170211

2017/02/10 (金)

フルスクリーンにしたい!

| 14:27 | フルスクリーンにしたい! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - フルスクリーンにしたい! - 雪乃☆雫のなでしこ日和 フルスクリーンにしたい! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 ちょっとまたカメラに戻って、問題の、スタイル指定ですが・・・

 だんだんメッセージ送信だらけなのが、個人的にイヤになったのと、英語はイヤと言っても結局のところ定数は使った方が、後でケンサクするのに便利でしょってわけで、っくり書き換えていたら、なんだか分かんないケド、「枠固定」も、最大化ボタンや最小化ボタンの有効変更も、ふつーに通ったんだよね。

 気のせいだったのか?!・・っと思ったけれど、元のコードではやっぱり動かないんだよね。

 謎。なんだか、わけ分からん(?_?)

 しかも結局、フルスクリーンは出来なかったんですよ。

 カメラ接続前なら、「枠なし」もできたんだけど、カメラ接続後に「枠固定」から「枠なし」に変更すると、やっぱり切断されてしまうっぽい。

 むむむ~。


 それなら、ウィンドウのクライアント幅と高さをデスクトップWとHにして、位置を枠やタイトルバーの分マイナスに設定すれば、一見それっぽくなるだろう・・・と考えたんだけど、コレも出来なかった><

 ウィンドウの最大サイズには上限があるらしく、何を設定しても1370*753以上にはならないんだよね。(解像度が1366*768の場合)

 幅はいいけど、高さが足りない><

 でもまー、とりあえずコレでっ!!(えっ;)

 だって、APIを使えばなんとか出来そうな気もするけど、旧版のなでしこでは、んな苦労しなくても、ふつーに「枠なし」に変更ができるんだもん!


 それよりもっと重要なのが、キャプチャーウィンドウのサイズ変更です。

 これは、窓ハンドルサイズ設定でカンタンに出来るだろうとおもったら、出来なかった。

 これまた、切断(?)されてしまう。

 APIで作ったヤツっていうのは、何かっちゅうと、うまくできないんだねヽ(;´Д`)ノ

 さて、こで、発見してきたのが、SetWindowPosとゆうAPI。

 APIで作ったヤツは、APIで何とかするしかないってこったろう・・・

 「配列順序のハンドル」も、「ウィンドウ位置のオプション」も、なんだかよくわかんないけど、取りあえず無視する!

 そうすると、単にX,Y,W,Hを指定するだけ。

 ちなみに、窓ハンドルサイズ設定のX1,y1,x2,y2より、こっちのほうが、ワタシ的には感覚的に分かりやすくて助かる。

#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411206.aspx
●SetWindowPos(hWnd,hWndInsertAfter,X,Y,cx,cy,uFlags) =DLL("user32.dll",
"BOOL SetWindowPos(
HWND hWnd,             // ウィンドウのハンドル
HWND hWndInsertAfter,  // 配置順序のハンドル…?
int X,                 // 横方向の位置
int Y,                 // 縦方向の位置
int cx,                // 幅
int cy,                // 高さ
UINT uFlags            // ウィンドウ位置のオプション
)")

●窓ハンドル位置サイズ設定(ハンドルにX,Y,W,Hを)
  SetWindowPos(ハンドル,0,X,Y,W,H,0)
#-----------------------------------------------------------

 これで・・・

#-----------------------------------------------------------
母艦のクライアント幅はデスクトップW母艦のクライアント高さはデスクトップH。
CWハンドルに0,0,母艦のクライアント幅,母艦のクライアント高さを窓ハンドル位置サイズ設定。
CWハンドルをオンにスケーリングフラグ設定。


!WM_CAP_SET_SCALEとは整数=$400+53                # 画像をキャプチャーウィンドウに合わせて拡縮(オンオフ)
●スケーリングフラグ設定(ハンドルをfに)
  メッセージ送信(ハンドル,WM_CAP_SET_SCALE,f,0)      # f=オンオフ
#-----------------------------------------------------------

 できた~♪♪♪

 でも・・・

 分かってたけど、640*480の映像を1366*768のデスクトップに合わせてるので、横長にみょーんと引き延ばされてしまうのです;

 非HD時代のテレビの再放送みたいに、レターボックスにするか、幅をデスクトップ幅に合わせて、上下を切って表示(できるのかな?)する感じ?

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170210