how to resize a video using mciSendString

2.6k views Asked by At

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
1

There are 1 answers

0
Dean On BEST ANSWER

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