- - PR -
MediaPlayerの静止画をpictureboxに表示したいのですが
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-14 16:13
こんにちは。
あちこちのサイトを探しても見つからない(探せない?)ので教えてください。 VB.NETで次のようなWindowsアプリケーションの一部を作成しています。 @FormにAxMediaPlayerを張り付け、AVIファイルを再生します。 A動画を一時停止して、コマンドボタンを押すことによって、静止画全面を同じフォーム上にあるpictureboxに表示する。 とりあえずここまでできればよいのです。 そのあとは、静止画にファイル名を付け保存するとか、detagridにファイル名を表示するとかの処理を行いますが、これは何とかできそうです。 サイトの情報から、 pictureboxに表示されている画像を、(clipboadにコピーして、)ファイルに落とすとか別のpictureboxに表示することはできたのですが、MediaPlayerの静止画となるとやり方がわかりません。 マウスで範囲選択するとか、そもそもMediaPlayerではできないのか、グレープシティで出している「LEAD ScreenCapture Contorol」を使うしかないのでしょうか? | ||||||||||||
|
投稿日時: 2004-04-14 17:09
動画のキャプチャ、になるんですよね?それって、著作権の方で、良いのでしょうか?
方法の一つとしては、コントロールのフォーム座標をスクリーン座標に変換し、スクリーン全体のキャプチャから切り出す、というのがあると思います。 | ||||||||||||
|
投稿日時: 2004-04-15 14:20
著作権ですか〜。それは使う側のモラルにまかせる・・・・ではダメ?
そもそも著作権侵害を起こすかもしれないソフトを作ること自体ダメですか?
| ||||||||||||
|
投稿日時: 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発でやるにはどういう手段があるのでしょうか? | ||||||||||||
|
投稿日時: 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 ] | ||||||||||||
|
投稿日時: 2004-04-20 16:57
とりあえずbutton1_Clickの一番最初に
SendKeys.Send("%{PRTSC}") を入れました。 | ||||||||||||
|
投稿日時: 2004-04-20 18:36
あれ?出来ました?私が読んだ限りでは、出来なさそうだったのですが…
[ メッセージ編集済み 編集者: Jitta 編集日時 2004-04-20 18:36 ] | ||||||||||||
|
投稿日時: 2004-04-21 08:11
できてます。
私も半信半疑でしたが、ちょっとやってみようとやってみたら、できました。 |