Programación General > Visual Basic 6.0 e inferiores

 Procesar frames con AVICap

(1/1)

Geo:
Qué tal amigos, estoy realizando una aplicación de procesamiento de video, para ello estoy utilizando AVICap. De hecho, ya he realizado lo que intento hacer, con C (sin AVICap) y con VB.NET, sin embargo, por motivos didáctivos me han pedido lo implemente también en VB 6 :p.

El problema es que de VB no conozco demasiado, y tengo problemas para poder configurar la función "callback" que se ejecutará al momento de que la cámara se actualiza con el siguiente frame. En VB.NET lo estoy haciendo así (lo tomé de otro código que encontré):

Módulo:

--- Código: Visual Basic ---    Delegate Function CallBackDelegate(ByVal hwnd As IntPtr, ByRef lpVhdr As VIDEOHDR) As IntPtr    Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As CallBackDelegate) As IntPtr     Public Structure VIDEOHDR        Dim lpData As Integer '// address of video buffer        Dim dwBufferLength As Integer '// size, in bytes, of the Data buffer        Dim dwBytesUsed As Integer '// see below        Dim dwTimeCaptured As Integer '// see below        Dim dwUser As Integer '// user-specific data        Dim dwFlags As Integer '// see below        <VBFixedArray(3)> Dim dwReserved() As Integer '// reserved; do notuse}    End Structure 
Clase del form principal:

--- Código: Visual Basic ---Public Class frmCaptura    Dim hwdc As Integer    Dim conectado As Boolean    Dim g As Graphics    Private delCallBack As CallBackDelegate = New CallBackDelegate(AddressOf procesaFrame)      Private Sub btnIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciar.Click        Dim res As Integer         hwdc = capCreateCaptureWindow("Captura Cámara", WS_CHILD Or WS_VISIBLE, 0, 0, 320, 240, picCaptura.Handle.ToInt32, 0)        If (hwdc <> 0) Then            res = SendMessage(hwdc, WM_CAP_DRIVER_CONNECT, 0, 0)            res = SendMessage(hwdc, WM_CAP_SET_PREVIEW, 1, 0)            res = SendMessage(hwdc, WM_CAP_SET_PREVIEWRATE, 60, 0)            conectado = True            ' Configura callback            res = SendMessage(hwdc, WM_CAP_SET_CALLBACK_FRAME, New IntPtr(0), delCallBack)        Else            MsgBox("No se encontró dispositivo de captura")        End If     End Sub...     Private Function procesaFrame(ByVal hwnd As IntPtr, ByRef lpVHdr As VIDEOHDR) As IntPtr    ...    End Function  
¿Alguien sabría cómo hacerlo en VB 6? De hecho, ya tengo un avance, pero me gustaría saber si alguien ya lo ha hecho y que pudiera echarme una mano :). Por el momento ya los estoy convenciendo de trabajar con .NET (con VB o C#, que lo manejo mejor), ya que con C/C++ por el momento nop (este si lo domino :p).

Gracias.

Geo:
Ya lo conseguí, aunque ahora tengo problemas con el manejo de memoria dentro de la función callback, a ver si puedo con esto :).

Navegación

[0] Índice de Mensajes

Ir a la versión completa