VB 6 Эскизы видеофайлов

Тема в разделе "Visual Basic 6 / Сценарии VBScript, JScript", создана пользователем Сергей, 26 июл 2015.

  1. Сергей
    Оффлайн

    Сергей Активный пользователь

    Сообщения:
    253
    Симпатии:
    120
    Подскажите, как в PictureBox-е получить эскиз видеофайла (flv, mp4, wmv,...), находящегося по адресу...
     
  2. Kиpилл
    Онлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.211
    Симпатии:
    4.978
    Возможно IMediaDet Interface?
     
    Dragokas нравится это.
  3. Сергей
    Оффлайн

    Сергей Активный пользователь

    Сообщения:
    253
    Симпатии:
    120
    Ого, для получения эскизов 18-ти файлов придется их "вскрыть" для получения полноформатного скриншота, а потом их нужно будет уменьшить до размеров пикчуребоксов... долго будет. Или так оно и делается? Я просто ожидал, что заготовленный эскиз может храниться в самом файле
     
  4. Kиpилл
    Онлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.211
    Симпатии:
    4.978
    Вот,посмотрите вариант - стырил кажется на кибере.
    http://rghost.ru/6svzZ6mTY
    Возможно @Dragokas еще что то подскажет,он в этом деле больше разбирается)
     
  5. Сергей
    Оффлайн

    Сергей Активный пользователь

    Сообщения:
    253
    Симпатии:
    120
    Похоже на исходник VisualBasic, но почему то много эксэмэля, у меня не открывается. Нужно создать проект и внедрить исходники?, или это не VB6?
     
  6. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Это VB.NET. И работа там ведется с библиотекой Interop.DexterLib.dll, которая идет в комплекте. К VB6 нативно ее не подключить.

    Но это делать и незачем. В системе уже есть библиотека, в которой имеются и типы данных, и все необходимые методы.
    Вы можете перевести код VB.NET практически один к одному, просто подключив к проекту библиотеку c:\windows\system32\qedit.dll
    (или c:\windows\syswow64\qedit.dll, если ОС 64-битная)

    В помощь о MediaDet эта книга.
     
    Kиpилл нравится это.
  7. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Сергей, ну как успехи, еще примеры находили?

    На основе того интерфейса, что давал Кирилл и системной библиотеки qedit.dll получается вот такой код:

    Код (vb.net):
    Option Explicit

    Dim md          As MediaDet
    Dim sFrameFile  As String
    Dim iFrameCnt   As Integer
    Dim lCurFrame   As Long
    Dim FileName    As String
    Dim StreamLen   As Double

    Private Sub Form_Load()
        sFrameFile = App.Path & "\Frame.bmp"
        Slider1.Min = 0
        Slider1.Max = 1000
    End Sub

    Private Sub cmdOpenFile_Click()
        On Error GoTo ErrHandler
        With CommonDialog1
            .Filter = "Video files (*.*)|*.*"
            .DialogTitle = "Select File"
            .CancelError = True
            .ShowOpen
            FileName = .FileName
            Call Reload
            md.CurrentStream = 0
            lblFrame.Caption = "0 / " & md.StreamLength \ 1
            Slider1.Enabled = True
            lCurFrame = 0
        End With
        Exit Sub
    ErrHandler:
    End Sub
    Function Reload() As Boolean
        If Len(FileName) = 0 Then Exit Function
        If Not (md Is Nothing) Then Reload = True: Exit Function
        Set md = New MediaDet
        md.FileName = FileName
        StreamLen = md.StreamLength
        Reload = True
    End Function
    Sub GoToFrame(lFrame As Long)
        If Not Reload() Then Exit Sub
        md.WriteBitmapBits lFrame, Picture1.Width \ Screen.TwipsPerPixelX, Picture1.Height \ Screen.TwipsPerPixelY, sFrameFile
        Picture1.Picture = LoadPicture(sFrameFile)
        Reload  ' reinit interface because of some bug in qEdit.dll with self-destruct of instance after each call
    End Sub
    Private Sub Slider1_Click()
        If Not Reload() Then Exit Sub
        lCurFrame = Slider1.Value / Slider1.Max * StreamLen \ 1
        lblFrame.Caption = "0 / " & lCurFrame
        GoToFrame lCurFrame
    End Sub
    Private Sub cmdSaveFrame_Click()
        If Not Reload() Then Exit Sub
        iFrameCnt = iFrameCnt + 1
        md.WriteBitmapBits lCurFrame, Picture1.Width \ Screen.TwipsPerPixelX, Picture1.Height \ Screen.TwipsPerPixelY, App.Path & "\Frame" & Right$("00" & iFrameCnt, 3) & ".bmp"
    End Sub
    Private Sub cmdNext_Click()
        If Not Reload() Then Exit Sub
        If lCurFrame <= (StreamLen - 1) Then lCurFrame = lCurFrame + 1
        lblFrame.Caption = "0 / " & lCurFrame
        GoToFrame lCurFrame
    End Sub
    Private Sub cmdPrev_Click()
        If lCurFrame >= 1 Then lCurFrame = lCurFrame - 1
        lblFrame.Caption = "0 / " & lCurFrame
        GoToFrame lCurFrame
    End Sub

    Frames.jpg

    Только поддержка форматов сносная. И эта библиотека багованная (в отличие от той, что сделана на основе NET.Framework) - при каждом обращении к экземпляру объекта самоуничтожает его, из-за чего при пролистывании каждого кадра приходится заново создавать объект.
     

    Вложения:

    • FrameWorker.zip
      Размер файла:
      2,9 КБ
      Просмотров:
      1
    Kиpилл нравится это.
  8. Сергей
    Оффлайн

    Сергей Активный пользователь

    Сообщения:
    253
    Симпатии:
    120
    Работа завалила все свободное время. Не пробовал
     
  9. Сергей
    Оффлайн

    Сергей Активный пользователь

    Сообщения:
    253
    Симпатии:
    120
    Но ,к сожалению, оно не поддерживает форматов .flv у меня таких около тысячи файлов, и .mp4
     

Поделиться этой страницей