@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

MediaPlayerの静止画をpictureboxに表示したいのですが

投稿者投稿内容
じいじ
大ベテラン
会議室デビュー日: 2003/11/11
投稿数: 223
投稿日時: 2004-04-14 16:13
こんにちは。
あちこちのサイトを探しても見つからない(探せない?)ので教えてください。
VB.NETで次のようなWindowsアプリケーションの一部を作成しています。

@FormにAxMediaPlayerを張り付け、AVIファイルを再生します。
A動画を一時停止して、コマンドボタンを押すことによって、静止画全面を同じフォーム上にあるpictureboxに表示する。

とりあえずここまでできればよいのです。
そのあとは、静止画にファイル名を付け保存するとか、detagridにファイル名を表示するとかの処理を行いますが、これは何とかできそうです。

サイトの情報から、
pictureboxに表示されている画像を、(clipboadにコピーして、)ファイルに落とすとか別のpictureboxに表示することはできたのですが、MediaPlayerの静止画となるとやり方がわかりません。
マウスで範囲選択するとか、そもそもMediaPlayerではできないのか、グレープシティで出している「LEAD ScreenCapture Contorol」を使うしかないのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-14 17:09
 動画のキャプチャ、になるんですよね?それって、著作権の方で、良いのでしょうか?


 方法の一つとしては、コントロールのフォーム座標をスクリーン座標に変換し、スクリーン全体のキャプチャから切り出す、というのがあると思います。
じいじ
大ベテラン
会議室デビュー日: 2003/11/11
投稿数: 223
投稿日時: 2004-04-15 14:20
著作権ですか〜。それは使う側のモラルにまかせる・・・・ではダメ?
そもそも著作権侵害を起こすかもしれないソフトを作ること自体ダメですか?

引用:
Jittaさんの書込
コントロールのフォーム座標をスクリーン座標に変換し、スクリーン全体のキャプチャから切り出す

これについてちょっと調べてみます。いつもながら「勉強になる」ヒントありがとうございます。

じいじ
大ベテラン
会議室デビュー日: 2003/11/11
投稿数: 223
投稿日時: 2004-04-16 15:46
Jittaさん できました! 思ったより簡単でした。

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
'クリップボードにあるデータの取得
Dim d As IDataObject = Clipboard.GetDataObject()
'ビットマップデータ形式に関連付けられているデータを取得
Dim img As Image = CType(d.GetData(DataFormats.Bitmap), Image)
'クリップボードにデータがあれば
If Not (img Is Nothing) Then
Dim g As Graphics = PictureBox1.CreateGraphics()
'サムネイルを120×90ピクセルの大きさにする
Dim destinationRect As New RectangleF(0, 0, 120, 90)
'クリップボードの画像の(80,90)-(300,200)の範囲をトリミング
Dim sourceRect As New RectangleF(80, 90, 300, 200)
g.DrawImage(img, destinationRect, sourceRect, GraphicsUnit.Pixel)
g.Dispose()
End If
End Sub

ただ、Alt+PrintScreen キーを押して、クリップボードへフォームをコピーしなければならないんです。コマンドボタン1発でやるにはどういう手段があるのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-16 17:38
画面キャプチャを作る
http://www.hi-ho.ne.jp/tadokoro/menu/menu8_3.html

によると、画面のHDCを取得して、Bitmapへ転送、だそうです。
これだと“画面全体”なので、その中で“フォーム”がどこにあるか、計算しなければなりません。

#なにげにビデオキャプチャという文字もあるぞ?


あと、クリップボードを監視して、Bitmapが入ったら大きさから判断して、画面全体だったら切り出す、というのはどうでしょう?


[ メッセージ編集済み 編集者: Jitta 編集日時 2004-04-16 17:42 ]
じいじ
大ベテラン
会議室デビュー日: 2003/11/11
投稿数: 223
投稿日時: 2004-04-20 16:57
とりあえずbutton1_Clickの一番最初に
SendKeys.Send("%{PRTSC}")
を入れました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-20 18:36
引用:

じいじさんの書き込み (2004-04-20 16:57) より:
とりあえずbutton1_Clickの一番最初に
SendKeys.Send("%{PRTSC}")
を入れました。


 あれ?出来ました?私が読んだ限りでは、出来なさそうだったのですが…

引用:
SendKeysクラス:
PrintScreen {PRTSC} (今後使用するために予約されている)


引用:
Windows Host ScriptのSendKeys:
アプリケーションに PrintScreen キー ("{PRTSC}") を送ることはできません。



[ メッセージ編集済み 編集者: Jitta 編集日時 2004-04-20 18:36 ]
じいじ
大ベテラン
会議室デビュー日: 2003/11/11
投稿数: 223
投稿日時: 2004-04-21 08:11
できてます。
私も半信半疑でしたが、ちょっとやってみようとやってみたら、できました。

スキルアップ/キャリアアップ(JOB@IT)