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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1204
yoshidamci画面をコピーしたい7解決


yoshida

リンク

2009/12/4(Fri) 23:45:49|NO.29141

初心者です。よろしくお願いします。
mciコマンドで動画プレイヤーを作っています。
見よう見まねで、ここまでやりました。

mci "open "+refstr+" alias MOVIE"
mci "window MOVIE handle " + hwnd

1)これはHSPウィンドウの上にレイヤーのように
mciウィンドウが載っている、と解釈しているのですが、それで良いでしょうか?
2)この動画画面をコピーしたい
(pget、gcopyの対象をmciウィンドウに指定したい)
のですが、どうしたらよいでしょうか?
3)mciでオープンさせる先をバッファに指定する事はできるのでしょうか?

「ハンドル」という概念ががなかなか理解できなくて恥ずかしいのですが
ご教授いただけたら助かります。



この記事に返信する


ANTARES

リンク

2009/12/5(Sat) 00:22:03|NO.29143

>2)この動画画面をコピーしたい
>(pget、gcopyの対象をmciウィンドウに指定したい)
>のですが、どうしたらよいでしょうか?
 pgetやgcopyを試したことはありませんが、ペイント等で
コピー・ペーストすることすらできないので、難しいと思います。

>3)mciでオープンさせる先をバッファに指定する事はできるのでしょうか?
buuferで作成されるものは、Windowsでいうウィンドウではないので
無理だと思います。
 以下のスクリプトはbufferにはハンドルがないことを示しています。

mes "hwnd0="+hwnd screen 2,640,480 hwnd2=hwnd buffer 3,640,480 hwnd3=hwnd gsel 0,1 mes "hwnd0="+hwnd mes "hwnd2="+hwnd2 mes "hwnd3="+hwnd3



ANTARES

リンク

2009/12/5(Sat) 00:34:55|NO.29144

>「ハンドル」という概念ががなかなか理解できなくて
 「Windowsが個々のウィンドウに設定するID」という認識で十分でしょう。

 これ以上、詳しく知っても大して役に立ちませんが、
一応書いておくと、Xのポインタのポインタです。
 Xが何か正確には知りません(or忘れました)が、個々のウィンドウのすべての
属性を知るのに必要な構造体のはずです。



珠後

リンク

2009/12/5(Sat) 01:52:49|NO.29146

>個々のウィンドウのすべての属性を知るのに必要な構造体のはずです。

WNDCLASSEX構造体の事でしょうか
WinAPIでウィンドウを作成する際に定義する構造体です。



inovia

リンク

2009/12/5(Sat) 07:01:42|NO.29147

> 2)この動画画面をコピーしたい
通常は動画はビデオオーバーレイで表示するため
(ディスプレイに直接描画。つまりハードで処理される。)
キャプチャコピーできないようなっています。
ただし、2つ同時にはビデオオーバーレイは使えないので、
2つ目の動画を開いたときにはウィンドウに描画されます。
2つ目の方はそのままキャプチャすることが可能です。

別の方法としては、拙作の[hspdsp.dll]を使うことです。
難易度はMCIより上がりますが、動画ストリームから直接データを抜き取るため
ほぼ確実に動画キャプチャーができます。

http://www.vector.co.jp/soft/winnt/prog/se478632.html



inovia

リンク

2009/12/5(Sat) 21:56:12|NO.29153

MCI版


#uselib "user32.dll" #cfunc GetDC "GetDC" int #cfunc GetWindowDC "GetWindowDC" int #func ReleaseDC "ReleaseDC" int,int #cfunc GetForegroundWindow "GetForegroundWindow" #cfunc GetDesktopWindow "GetDesktopWindow" #func GetWindowRect "GetWindowRect" int,int #func GetClientRect "GetClientRect" int,int #uselib "gdi32.dll" #func BitBlt "BitBlt" int,int,int,int,int,int,int,int,int #define NULL 0 #define SRCCOPY 0x00CC0020 dialog "*",16 if stat=0:end fname=refstr //ダミー画面 mci "open \""+fname+"\" alias DUMMY type mpegvideo" mci "window DUMMY handle " + hwnd mci "put DUMMY destination at -320 -240 320 240" mci "play DUMMY":mci "stop DUMMY" //本体 mci "open \""+fname+"\" alias MOVIE type mpegvideo" mci "window MOVIE handle " + hwnd mci "put MOVIE destination at 0 0 640 480" mci "play MOVIE" dialog "キャプチャしたいところでOKを押す!" wait 100 // この辺を参考に // http://yokohama.cool.ne.jp/chokuto/advanced/capturewindow.html thwnd=hwnd screen 2,640,480,2:title "キャプチャ" dim rect,4 GetClientRect thwnd,varptr(rect) sx=rect(2)-rect(0):sy=rect(3)-rect(1) thdc=GetDC(thwnd) BitBlt hdc,0,0,sx,sy,thdc,0,0,SRCCOPY ReleaseDC thwnd,thdc gsel 2,1 // 全解放するにはallが使えます。 mci "close all"

hspdsp版


#include "hspdsp.as" // Ver 1.03用 // 注意 : SRCCOPY は hspdsp.as 内で定義されていますが // 次回VerUP時に削除を行います。注意してください。 ;#define SRCCOPY 0x00CC0020 dsp_Init dialog "*",16 if stat=0:end fname=refstr dsp_Open fname,0,0,0,0 dsp_Play hwnd,0,0,640,480 dialog "キャプチャしたいところでOKを押す!" screen 2,dsp_Info(0),dsp_Info(1),2:title "キャプチャ" dsp_CaptureVideo hdc,0,0,dsp_Info(0),dsp_Info(1),SRCCOPY gsel 2,1 dsp_Close



inovia

リンク

2009/12/5(Sat) 22:01:22|NO.29154

hspdsp.dll(dsp_CaptureVideoEx 版)
dsp_CaptureVideo命令でキャプチャできない場合はこちらを使います。


#include "hspdsp.as" // dsp_CaptureVideoEx 版 // Ver 1.03用 // 注意 : SRCCOPY は hspdsp.as 内で定義されていますが // 次回VerUP時に削除を行います。注意してください。 ;#define SRCCOPY 0x00CC0020 dsp_Init dialog "*",16 if stat=0:end fname=refstr dsp_UseCaptureVideoEx 1 dsp_Open fname,0,0,0,0 dsp_SetCaptureBufferSamples 1 dsp_Play hwnd,0,0,640,480 dialog "キャプチャしたいところでOKを押す!" screen 2,dsp_Info(0),dsp_Info(1),2:title "キャプチャ" dsp_CaptureVideoEx hdc,0,0,dsp_Info(0),dsp_Info(1),SRCCOPY gsel 2,1 dsp_Close



yoshida

リンク

2009/12/6(Sun) 21:14:37|NO.29172

皆様、ありがとうございました。
私には高度な話ばかりでしたが、
なんとか手がかりはつかめたように思います。
教えていただいた方法を試してみます。
それにしても、初投稿だったのですが、
初歩的にな質問に皆さん、丁寧に答えてくださって感謝です。
HSPっていいですね。



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