vb.netmcisendstring

how to resize a video using mciSendString


Below is the code I use to play a video. Video is played on a panel but when Start a video it only shows a part of the video how can I fit the video inside the panel? Also how can I get the default size(height and width) of the video so that I can maintain aspect ratio.

Private Sub movieWindow_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles movieWindow.DragDrop
    Dim file_names As String() = DirectCast(e.Data.GetData(DataFormats.FileDrop), String())
    Dim result As String
    For Each file_name As String In file_names
        result = file_name.Substring(file_name.LastIndexOf("\") + 1)
        frmPlayList.playlist.Items.Add(result)
        frmPlayList.playlist2.Items.Add(file_name)
    Next file_name

    frmPlayList.playlist2.SelectedIndex = frmPlayList.playlist2.Items.Count - 1
    filename = frmPlayList.playlist2.SelectedIndex
    retVal = mciSendString("play movie", 0, 0, 0)
End Sub

Solution

  • Try this bit of code to automatically resize the movie on the panel on which you are hosting the video. It will also maintain the correct aspect ratio. (Just substitute the name of your panel for "movieWindow")

    maxSize is the maximum size you want the video to be. It will be forced to fit within this size.

    Call the sub right before you issue the "play movie" command. (edit 3/20/2012 - fixed typo on variable name).

    SizeVideoWindow(movieWindow.size)
    dim retval as integer = mcisendstring("play movie", 0, 0, 0)
    
    Private Sub SizeVideoWindow(maxSize as size)
    
        Dim ActualMovieSize As Size = getDefaultSize()
        Dim AspectRatio As Single = ActualMovieSize.Width / ActualMovieSize.Height
    
        Dim iLeft As Integer = 0
        Dim iTop As Integer = 0
    
        Dim newWidth As Integer = maxSize.width
        Dim newHeight As Integer = newWidth \ AspectRatio
    
        If newHeight > maxSize.height Then
    
            newHeight = maxSize.height
            newWidth = newHeight * AspectRatio
            iLeft = (maxSize.width - newWidth) \ 2
    
        Else
    
            iTop = (maxSize.height - newHeight) \ 2
    
        End If
    
        mciSendString("put movie window at " & iLeft & " " & iTop & " " & newWidth & " " & newHeight, 0, 0, 0)
    
    End Sub
    
    Public Function getDefaultSize() As Size
        'Returns the default width, height the movie
        Dim c_Data As String = Space(128)
        mciSendString("where movie source", c_Data, 128, 0)
        Dim parts() As String = Split(c_Data, " ")
    
        Return New Size(CInt(parts(2)), CInt(parts(3)))
    End Function