DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33740 / inTopicNo.1)  PictureBoxに動画を表示させた後に静止画を表示させる
  
□投稿者/ けい 一般人(2回)-(2017/12/05(Tue) 18:16:10)
  • アイコン環境/言語:[Windows10、VB.NET、.NET Framework4.5.2] 
    分類:[.NET] 

    お世話になります。

    Windows10、VB.NET2015、.NET Framework4.5.2で開発しています。

    FormにButton1、Button2、PictureBox1があります。
    Button1を押すと、PictureBox1に、動画が表示される。
    その後、Button2を押すと、PictureBox1に静止画が表示される。
    このようにしたいと考えています。

    コードは以下の通りです。

    --------------------------
    Public Class Form1

    '再生する動画ファイル
    Private Const VIDEOFILE$ = "(動画ファイル名)"

    'グラフマネージャ(ActiveMovie control type libraryを参照追加)
    Private mGrp As QuartzTypeLib.FilgraphManager



    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    'グラフマネージャの作成
    mGrp = New QuartzTypeLib.FilgraphManager

    '再生用のグラフを作成
    mGrp.RenderFile(VIDEOFILE$)

    'ビデオサイズ(縦横)を取得
    Dim bv As QuartzTypeLib.IBasicVideo
    Dim vx&, vy&
    bv = mGrp
    bv.GetVideoSize(vx, vy)

    'ウィンドウ内で動画を再生させる
    Dim vw As QuartzTypeLib.IVideoWindow
    vw = mGrp
    vw.WindowStyle = &H40000000 'WS_CHILD
    vw.SetWindowPosition(0, 0, vx, vy)
    vw.Owner = PictureBox1.Handle・・・※

    '再生
    mGrp.Run()

    End Sub



    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    PictureBox1.Dispose()
    PictureBox1.Image = Nothing
    PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
    PictureBox1.ImageLocation = "(静止画ファイル名)"

    End Sub
    --------------------------

    これを実行しますと、Button1のクリックは成功しますが、Button2のクリックが成功しません。何も表示されません。

    Button1をクリックしないで、Button2をクリックすると、成功します。

    おそらく※の部分が解放できていないのことが原因だと思うのですが、
    その方法が分かりませんでした。

    お分かりになる方がいらっしゃいましたら、
    ご教示頂けましたら幸いです。

    どうぞよろしくお願い致します。


    (参照サイト)
    https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/b95a2655-c48f-4c16-bae8-ad2fb6fe0964/visual-basic-2010-expresspicturebox?forum=vbgeneralja

引用返信 削除キー/
■33743 / inTopicNo.2)  Re[1]: PictureBoxに動画を表示させた後に静止画を表示させる
□投稿者/ まりもん 一般人(2回)-(2017/12/06(Wed) 11:15:35)
  • アイコン動画の再生が終わってないから、画像を表示した瞬間に上書きされているのでは?
    動画再生中であれば、動画再生を停止してから、静止画を表示すればいいのではないでしょうか?

    また、Button2_Clickに
    PictureBox1.Dispose
    とありますが、Disposeはオブジェクトを破棄する時に呼び出す物なので
    Disposeを呼んだ後にそのオブジェクトを使ってはいけません。

引用返信 削除キー/
■33744 / inTopicNo.3)  Re[2]: PictureBoxに動画を表示させた後に静止画を表示させる
□投稿者/ けい 一般人(3回)-(2017/12/06(Wed) 15:52:32)
  • アイコンNo33743に返信(まりもんさんの記事)

    ありがとうございます。

    動画が終わるまで待ってから、Button2を押すようにはしていました。

    Dim vw As QuartzTypeLib.IVideoWindow
    を、
    Public vw As QuartzTypeLib.IVideoWindow
    にして、
    Form1の下へ。

    Button2のコードを、

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    vw.SetWindowPosition(0, 0, 0, 0)
    vw.Owner = Nothing
    PictureBox1.Image = Nothing
        PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
        PictureBox1.ImageLocation = "(静止画ファイル名)"
    End Sub

    として、解決できました。

    これに関連して別に質問させて頂きたいことがありますが、
    別スレッドにさせて頂きます。
引用返信 削除キー/
■33745 / inTopicNo.4)  Re[3]: PictureBoxに動画を表示させた後に静止画を表示させる
□投稿者/ けい 一般人(4回)-(2017/12/06(Wed) 15:53:24)
  • アイコンありがとうございます。
解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -