HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0912
指定した範囲をスクリーンキャプチャしたい3未解決


リンク

2014/9/12(Fri) 07:48:37|NO.64848

▼スクリーンキャプチャ - Advanced HSP
http://chokuto.ifdef.jp/advanced/capturescreen.html
デスクトップをキャプチャする方法を探していて、こちらの記事を拝見しました。
ここから、画面全体ではなく例えば「デスクトップ右上付近(1000,100)から横200px縦20px」のような、範囲を指定してキャプチャすることは可能でしょうか?
解説内の
BitBlt hdc, 0, 0, sx, sy, hdcScreen, 0, 0, SRCCOPY | CAPTUREBLT
の値を色々弄ってみたのですが、保存される画像のサイズは変わらないようでした。

gsel 1にデスクトップをキャプチャしてから必要な部分だけを切り取りgsel 0にコピーすれば結果は同じなのですが、redraw 1 :await 1000.0 / 60 :redraw 0として処理をループさせている為、非常に重くなってしまい悩んでいます。
最初からキャプチャ範囲を狭くできれば少しは軽くなるかもしれないと思い、こちらで質問させていただきました。
宜しければアドバイス等頂けるとありがたいです。


ただ、そもそもキャプチャする範囲を狭めれば処理が軽くなるのかどうか解っていません。
範囲の広さに関係なくキャプチャという処理自体が重いのであれば、別の方法を考えようと思います。


※追記
デスクトップ上の指定の座標の色を取得し続けるのが目的なので、画像として一旦保存するのではなく、直接デスクトップ上から取得すればどうかと、
▼別ウインドウからのpget
http://hsp.tv/play/pforum.php?mode=pastwch&num=43084
こちらの記事のNO.43115を参考に試してみたのですが、getPixel ginfo_mx, ginfo_myで取得する座標点を5つ6つと増やしたところ、スクリーンキャプチャ方法よりも重くなってしまいました。



この記事に返信する


koro

リンク

2014/9/12(Fri) 08:32:40|NO.64849

>の値を色々弄ってみたのですが、保存される画像のサイズは変わらないようでした。
どういじったのか書かないと何が悪かったのかわからない
sx,syが画像の大きさでBitBltの7,8番目のパラメータが座標だからそこをいじればいいです。



ぴょぴょ(科学太郎)

リンク

2014/9/12(Fri) 10:36:45|NO.64850

> ※追記
> デスクトップ上の指定の座標の色を取得し続けるのが目的なので、
> 画像として一旦保存するのではなく、直接デスクトップ上から取得すればどうかと、
1つのピクセル値を取得し続けるのならば GetPixel 関数を使えば良いでしょう。
#uselib "Gdi32.dll"
#func CreateDC "CreateDCA" sptr,sptr,sptr,sptr #func DeleteDC "DeleteDC" sptr #func GetPixel "GetPixel" sptr,sptr,sptr #define NULL 0 *Main screen 0,300,50,0,0,0:gsel 0,2 title "カラーコードの監視" onexit *OnQuit CreateDC "DISPLAY",NULL,NULL,NULL hdcScreen=stat ;監視座標 px=100 py=100 repeat redraw 0 GetPixel hdcScreen,px,py r=(stat>> 0) & $FF g=(stat>> 8) & $FF b=(stat>>16) & $FF color $FF,$FF,$FF:boxf color $00,$00,$00:pos 0,0 mes strf("r=%02X,g=%02X,b=%02X",r,g,b) redraw 1 await 100 loop stop *OnQuit DeleteDC hdcScreen end



ぴょぴょ(科学太郎)

リンク

2014/9/12(Fri) 10:43:24|NO.64851

追記。

マウス座標の色取得ならば
GetPixel hdcScreen,ginfo_mx,ginfo_my

とすれば良い。



ONION software Copyright 1997-2021(c) All rights reserved.