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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1002
焼き鳥DWM 有効時のデスクトップキャプチャ8未解決


焼き鳥

リンク

2017/10/2(Mon) 20:36:32|NO.81542

はじめまして。
Windows 7 でデスクトップをキャプチャした時に気づいたことなんですが、ループ内で BitBlt を使い連続して
キャプチャをするとどうしても 25 FPS 程度しか出ません。ループの速度は await 15 にしてあります。
調べてみたのですが DWM (Aero) が原因のようでテーマをクラシックスタイルしたところ 60 FPS 以上出ました。
更に調べてみると DwmGetSharedSurface という非公開の関数が出てきました。
DWM が有効でキャプチャを高速化することは出来ないのでしょうか?
長文失礼しました。



この記事に返信する


いののて

リンク

2017/10/2(Mon) 22:33:29|NO.81546

32bitビットマップを作成して、
それにコピーするのはどうでしょうか。
DWMが保持している32bitビットマップを、
HSPのために24bitビットマップに変換しているらしいです。

>DwmGetSharedSurfaceという非公開...
msdnで公開していない関数を使うと、
アップデートなどで仕様が可能性があるので
公開するソフトウェアで使うことはおすすめできません。
(dwmapiの非公開の関数には頭のDwmにpが付いていた気が...)



ゆー

リンク

2017/10/2(Mon) 22:39:19|NO.81547




いののて

リンク

2017/10/2(Mon) 22:40:24|NO.81548

×仕様が可能性 → ○仕様が変わる可能性

すみません。。



焼き鳥

リンク

2017/10/3(Tue) 09:00:17|NO.81549

>いののてさん
32Bit ビットマップを作成しデスクトップの画面を転送する以下のようなスクリプトを組んでみました。
ですが黒い画面が描画されるだけでデスクトップ画面が描画されません。
どうすればいいでしょうか?


#include "user32.as" #include "gdi32.as" wx = 640 wy = 480 screen 0,wx,wy dim bmi,40 dim pImage,wx * wy * 4 bmi = 40,wx,-wy,1 | 32 << 16,0,wx * wy * 4,0,0,0,0 CreateDC "DISPLAY",0,0,0 : h_dc = stat CreateDIBSection h_dc,varptr(bmi),0,varptr(pImage),0,0 : hBitmap = stat CreateCompatibleDC h_dc : hmdc = stat SelectObject hmdc,hBitmap : hOhandle = stat BitBlt hmdc,0,0,wx,wy,h_dc,0,0,0xCC0020 ReleaseDC hwnd,h_dc onexit *quit StretchDIBits hdc,0,0,wx,wy,0,0,wx,wy,varptr(pImage),varptr(bmi),0,0xCC0020 redraw 1 stop *quit SelectObject hmdc,hOhandle DeleteDC hmdc DeleteObject hBitmap end

>ゆーさん
なるほど・・・Aero を無効にする手もありますね。
ですが私は Aero を無効にしないでキャプチャしたいのです。
せっかくお返事をもらえたのに私的な理由でごめんなさい。



焼き鳥

リンク

2017/10/3(Tue) 10:08:20|NO.81550


StretchDIBits hdc,0,0,wx,wy,0,0,wx,wy,varptr(pImage),varptr(bmi),0,0xCC0020


StretchDIBits hdc,0,0,wx,wy,0,0,wx,wy,pImage,varptr(bmi),0,0xCC0020
にしたら描画されましたがやはり速度はイマイチで 60 FPS ではキャプチャ出来ませんでした。



MillkeyStars

リンク

2017/10/3(Tue) 13:05:51|NO.81551

画面にキャプチャした画像を表示した際の結果ですよね?
焼き鳥さんの提示されたスクリプトだと、取得と表示を同時に行おうとしていますが。

単純に画面キャプチャの更新回数を調べる際は、HSP に表示されない状態で計測しないと正しいキャプチャ速度は、測る事はできません。

[理由]
デスクトップから画面を取得するのに、転送処理が一回。
キャプチャを画面に更新しようとしているので、HSP → システムへの転送処理に一回。

さらに言えば、32Bit を 24Bit に変換またその逆も行っているのでさらに FPS が低下する原因です。



 

リンク

2017/10/4(Wed) 23:47:44|NO.81564

hspはオープンソースだから32bitに変更すればよくね?
http://dev.onionsoft.net/trac/openhsp



 

リンク

2017/10/5(Thu) 10:36:54|NO.81569

もしかしたらこれが使えっかも。
http://hsp.tv/play/pforum.php?mode=pastwch&num=63836



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