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

Сергій

Разработчик
Сообщения
405
Реакции
216
Баллы
218
Подскажите, как в PictureBox-е получить эскиз видеофайла (flv, mp4, wmv,...), находящегося по адресу...
 

Кирилл

Команда форума
Администратор
Сообщения
13,757
Реакции
6,133
Баллы
913
Возможно IMediaDet Interface?
 

Сергій

Разработчик
Сообщения
405
Реакции
216
Баллы
218
Возможно IMediaDet Interface?
Ого, для получения эскизов 18-ти файлов придется их "вскрыть" для получения полноформатного скриншота, а потом их нужно будет уменьшить до размеров пикчуребоксов... долго будет. Или так оно и делается? Я просто ожидал, что заготовленный эскиз может храниться в самом файле
 

Кирилл

Команда форума
Администратор
Сообщения
13,757
Реакции
6,133
Баллы
913
Вот,посмотрите вариант - стырил кажется на кибере.
http://rghost.ru/6svzZ6mTY
Возможно @Dragokas еще что то подскажет,он в этом деле больше разбирается)
 

Сергій

Разработчик
Сообщения
405
Реакции
216
Баллы
218
Вот,посмотрите вариант - стырил кажется на кибере.
http://rghost.ru/6svzZ6mTY
Возможно @Dragokas еще что то подскажет,он в этом деле больше разбирается)
Похоже на исходник VisualBasic, но почему то много эксэмэля, у меня не открывается. Нужно создать проект и внедрить исходники?, или это не VB6?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,102
Реакции
5,882
Баллы
648
Это VB.NET. И работа там ведется с библиотекой Interop.DexterLib.dll, которая идет в комплекте. К VB6 нативно ее не подключить.

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

В помощь о MediaDet эта книга.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,102
Реакции
5,882
Баллы
648
Сергей, ну как успехи, еще примеры находили?

На основе того интерфейса, что давал Кирилл и системной библиотеки 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) - при каждом обращении к экземпляру объекта самоуничтожает его, из-за чего при пролистывании каждого кадра приходится заново создавать объект.
 

Вложения

Сергій

Разработчик
Сообщения
405
Реакции
216
Баллы
218
Работа завалила все свободное время. Не пробовал
 
Сверху Снизу