Implementación de la función de fotografía del hardware de la cámara VB
No es que nadie vaya a responder a tu pregunta. Es solo que hizo la pregunta en el lugar equivocado. Esto pertenece a la programación de hardware. Por supuesto, pocas personas responderán cuando se trata de programación de software. Aquí hay un ejemplo en el que hace clic directamente en el botón de fotografía de la cámara.
Private Sub Form_Load()
Dim lpszName As String * 100
Dim lpszVer As String * 100
'Crear ventana de vídeo
' Leer lista de controladores
capGetDriverDescriptionA 0, lpszName, 100, lpszVer, 100
'Crear programa de ventana de vídeo
lwndC = capCreateCaptureWindowA(lpszName, WS_CAPTION Or WS_THICKFRAME Or WS_VISIBLE O WS_CHILD, -5, -30, Pic.Width, Pic.Height, Pic.hwnd, 0)
'Conecte la ventana de captura a un dispositivo de captura
Si capDriverConnect (lwndC , 0) Luego
' 'Para habilitar o deshabilitar el zoom en el modo de vista previa
capPreviewScale lwndC, True
'Enviar a la ventana de captura para configurar el frecuencia de visualización de fotogramas en modo de vista previa
capPreviewRate lwndC, 66
'Enviar a la ventana de captura para habilitar o deshabilitar el modo de vista previa
capPreview lwndC, True p> p>
'Ajusta el tamaño y formato de visualización de la ventana
SetWindowPos lwndC, HWND_BOTTOM, 0, 0, 430, 350, SWP_NOMOVE Or SWP_NOZORDER
End If
End Sub
Código en el módulo:
Public Const WS_BORDER = amp H800000
Public Const WS_CAPTION = amp HC00000
Const pública WS_SYSMENU = amp;H80000
Const pública WS_CHILD = amp;H40000000
Const pública WS_VISIBLE = amp;H10000000
Const pública WS_OVERLAPPED = amp; H0amp;
Const pública WS_MINIMIZEBOX = amp;H20000
Const pública WS_MAXIMIZEBOX = amp;H10000
Const pública WS_THICKFRAME = amp;H40000
Const. pública WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED o WS_CAPTION o WS_SYSMENU o WS_THICKFRAME o WS_MINIMIZEBOX o WS_MAXIMIZEBOX)
Const. pública SWP_N
OMOVE = amp; H2
Const pública SWP_NOSIZE = 1
Const pública SWP_NOZORDER = amp H4
Const pública HWND_BOTTOM = 1
Const pública HWND_TOPMOST = -1
Const pública HWND_NOTOPMOST = -2
Const pública SM_CYCAPTION = 4
Const pública SM_CXFRAME = 32
Const pública SM_CYFRAME = 33
Const pública WS_EX_TRANSPARENT = amp;H20amp;
Const pública GWL_STYLE = (-16)
'Establecer valor para el formulario
p>
Declarar función SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declarar función lStrCpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
Declarar función lStrCpyn Lib "kernel32" Alias "lstrcpynA" (ByVal lpString1 como cualquiera, ByVal lpString2 Mientras, ByVal iMaxLength Mientras) Mientras
Declarar Sub RtlMoveMemory Lib "kernel32" (ByVal hpvDest Mientras, ByVal hpvSource Mientras, ByVal cbCopy Mientras)
Declarar Sub hmemcpy Lib "kernel32" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
'Esta función especifica una nueva posición y estado para la ventana.
También puede cambiar la posición de la ventana en la lista de ventanas interna
Declarar Función SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'Cerrar el formulario y subformulario
Declarar función DestroyWindow Lib "user32" (ByVal hndw As Long) As Booleano
Declarar función GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
'Establecer información para la ventana especificada en la estructura
Declarar función SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
LwndC público As Long 'Manejador de formulario
Const público HTCAPTION = 2< / p>
Const pública WM_NCLBUTTONDOWN = amp; HA1
Función de declaración pública ReleaseCapture Lib "user32" () Siempre
'********** *** *************************'Guardar frente de ventana
Public Const WM_USER = amp H400 'Dirección de compensación
Escriba POINTAPI
X As Long
Y As Long
Tipo final
'Llamar a la función de ventana de una ventana a El mensaje se envía a esa ventana.
Esta función no regresa hasta que se procesa el mensaje
'hwnd (long) el identificador de la ventana para recibir el mensaje, wmsg (long) el identificador del mensaje, wparam (long) dependiendo del mensaje iparam (CUALQUIER) Depende del mensaje
Declarar Función SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) Como Long p>
Declarar función SendMessageS Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As String) As Long
Const pública WM_CAP_START = WM_USER 'Dirección de inicio
Const pública WM_CAP_GET_CAPSTREAMPTR = WM_CAP_START 1 '
Const pública WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START 2 'Establece la función de devolución de llamada que se llamará cuando se produzca un error en el program
Public Const WM_CAP_SET_CALLBACK_STATUS = WM_CAP_START 3 'Establece en el programa la función de devolución de llamada que se llama cuando cambia el estado
Public Const WM_CAP_SET_CALLBACK_YIELD = WM_CAP_START 4 'Establece en el programa el función de devolución de llamada que se llama cuando el programa cede
Public Const WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START 5 'Establece en el programa la función adicional que se llama cuando se captura el fotograma de vista previa
Public Const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START 6 'Establece en el programa cuando hay una función de devolución de llamada que se llama cuando hay un nuevo buffer de video disponible
Public Const WM_CAP_SET_CALLBACK_WAVESTREAM = WM_CAP_START 7 'Establece la función de devolución de llamada que se llama cuando hay un nuevo buffer de audio disponible en el programa
Const Pública WM_CAP_GET_USER_DATA = WM_CAP_START 8 'Asocia los datos a una ventana de captura, puedes obtener un dato entero largo
Const Pública WM_CAP_SET_USER_DATA = WM_CAP_START 9 'Asocia los datos a una ventana de captura,' puede establecer un entero largo Escriba datos
Public Const WM_CAP_DRIVER_CONNECT = WM_CAP_START 10 'Conecte la ventana de captura a un dispositivo de captura
Public Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START 11
''Se utiliza para desconectar el controlador de captura y la ventana de captura
Public Const WM_CAP_DRIVER_GET_NAME = WM_CAP_START 12 'Conectar a' para obtener el nombre del controlador del dispositivo de captura conectado a una ventana de captura
p>Public Const WM_CAP_DRIVER_GET_VERSION = WM_CAP_START 13 'Obtener el número de versión del controlador
Public Const WM_CAP_DRIVER_GET_CAPS = WM_CAP_START 14 'Para obtener el rendimiento del hardware que captura la ventana.
'Capturar archivos y caché
Public Const WM_CAP_FILE_SET_CAPTURE_FILE = WM_CAP_START 20 'Se puede especificar otra ruta y nombre de archivo. Este mensaje especifica el nombre del archivo, pero no crea el archivo, no lo abre ni solicita espacio para el archivo
Public Const WM_CAP_FILE_GET_CAPTURE_FILE = WM_CAP_START 21 'Para obtener el archivo de captura actual
Public Const WM_CAP_FILE_ALLOCATE = WM_CAP_START 22 'Preasigne espacio para el archivo de captura, reduciendo así los fotogramas perdidos
Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START 23 'Guarde el archivo de captura como otro archivo especificado por el usuario. Este mensaje no cambia el nombre ni el contenido del archivo de captura.
'Dado que el archivo de captura conserva su nombre de archivo original, se debe especificar un nuevo nombre de archivo para guardarlo
Público Const WM_CAP_FILE_SET_INFOCHUNK = WM_CAP_START 24 'Puedes insertar bloques de información como texto o datos personalizados en archivos avi. También puede usar este mensaje para borrar el bloque de información en el archivo avi
Public Const WM_CAP_FILE_SAVEDIB = WM_CAP_START 25 'Guarde la imagen copiada del frame buffer como una biblioteca de bits independiente del dispositivo (DIB), la aplicación puede Utilice también estos dos mensajes de captura de un solo cuadro para editar la secuencia de cuadros,
'O cree una secuencia de fotografía en cámara lenta
Public Const WM_CAP_EDIT_COPY = WM_CAP_START 30' Una vez capturada la imagen , ponlo en el caché Copia la imagen al portapapeles
Public Const WM_CAP_SET_AUDIOFORMAT = WM_CAP_START 35 'Establece el formato de audio. Al configurar, pase un puntero a una estructura WAVEFORMAT, WAVEFORMATEX o PCMWAVEOFMAT
Public Const WM_CAP_GET_AUDIOFORMAT = WM_CAP_START 36 'para obtener el formato de los datos de audio y el tamaño de la estructura del formato.
Los formatos de audio de captura predeterminados son mono, 8 bits y PCM de 11 kHz
Public Const WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START 41 'El tamaño y la profundidad de la imagen del fotograma de vídeo digitalizado, así como el método de compresión de los datos de vídeo capturados. Seleccione
Public Const WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START 42 'Cuadro de diálogo de vídeo, utilizado para enumerar los tipos de señal de la tarjeta capturadora conectada a la fuente de vídeo, y
'Control de color, contraste y saturación. Para cambiar, si el controlador de video admite tecnología, puede usar este cuadro de diálogo
Public Const WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START 43 'El cuadro de diálogo de visualización de video controla la visualización del video en el monitor durante la captura de video. No tiene ningún efecto sobre los datos capturados, pero afectará el número de expresiones de señal
Public Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START 44 'Proporcione la ventana de captura para obtener la estructura del formato de video y el tamaño de la estructura.
Const pública WM_CAP_SET_VIDEOFORMAT = WM_CAP_START 45 'Se utiliza para configurar el formato de vídeo
Const pública WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START 46 'Cuadro de diálogo de compresión de vídeo
Const pública WM_CAP_SET_PREVIEW = WM_CAP_START 50 'Enviar a la ventana de captura para habilitar o deshabilitar el modo de vista previa
Public Const WM_CAP_SET_OVERLAY = WM_CAP_START 51 'Pon la ventana en modo de superposición.
Habilitar el modo de superposición también deshabilitará automáticamente el modo de vista previa
Public Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START 52 'Enviar a la ventana de captura para configurar la frecuencia de visualización de fotogramas en el modo de vista previa
Public Const WM_CAP_SET_SCALE = WM_CAP_START 53 'Para habilitar o deshabilitar el zoom en modo de vista previa
Public Const WM_CAP_GET_STATUS = WM_CAP_START 54 'Obtener el estado actual de la ventana de captura
Public Const WM_CAP_SET_SCROLL = WM_CAP_START 55 'Si es así en modo Vista previa o modo superposición también se puede enviar a la ventana a través de este mensaje.
'Establece la posición de la barra de desplazamiento del cuadro de video en el área de usuario de la ventana
'Información de respuesta al final de la definición
Public Const WM_CAP_SET_CALLBACK_CAPCONTROL = WM_CAP_START 85
Public Const WM_CAP_END = WM_CAP_SET_CALLBACK_CAPCONTROL
'// Importar dos funciones en la biblioteca de conexión avicap32.dll
Declarar función capCreateCaptureWindowA Lib "avicap32.dll" ( _
ByVal lpszWindowName As String, _
ByVal dwStyle As Long, _
ByVal X Mientras, ByVal Y Mientras Largo, ByVal nWidth Mientras Largo, ByVal nHeight Como Entero, _
ByVal hWndParent Mientras Largo, ByVal nID Mientras) Mientras
Declarar función capGetDriverDescriptionA Lib "avicap32 .dll" ( _
ByVal wDriver como entero, _
ByVal lpszName como cadena, _
ByVal cbName Mientras, _
ByVal lpszVer Como cadena, _
ByVal cbVer Mientras) Como booleano
Función capDriverConnect(ByVal lwnd Mientras, ByVal i Como entero ) Como booleano
'Conectar la ventana de captura a un dispositivo de captura
capDriverConnect = SendMessage(lwnd, WM_CAP_DRIVER_CONNECT, i, 0)
Finalizar función
Función capDriverDisconne
ct(ByVal lwnd As Long) As Boolean
''Se utiliza para desconectar el controlador de captura y la ventana de captura
capDriverDisconnect = SendMessage(lwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0)
Función final
Función capDriverGetName(ByVal lwnd As Long, ByVal szName As Long, ByVal wSize As Integer) As Boolean
'Obtener el nombre del controlador
p>
capDriverGetName = SendMessage(lwnd, YOURCONSTANTMESSAGE, wSize, szName)
Función final
Función capDriverGetCaps(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer ) Como booleano
'Para obtener el rendimiento del hardware de la ventana de captura
capDriverGetCaps = SendMessage(lwnd, WM_CAP_DRIVER_GET_CAPS, wSize, s)
End Function
Función capPreview(ByVal lwnd As Long, ByVal f As Boolean) As Boolean
'Enviar a la ventana de captura para habilitar o deshabilitar el modo de vista previa
capPreview = SendMessage(lwnd, WM_CAP_SET_PREVIEW, f, 0)
Función final
Función capPreviewRate(ByVal lwnd As Long, ByVal wMS As Integer) Como booleano
' es enviado a la ventana de captura Para configurar la frecuencia de visualización de fotogramas en modo de vista previa
capPreviewRate = SendMessage(lwnd, WM_CAP_SET_PREVIEWRATE, wMS, 0)
Fin de función
Función capPreviewScale(ByVal lwnd As Long, ByVal f As Boolean) As Boolean
'Para habilitar o deshabilitar la escala en modo de vista previa
capPreviewScale = SendMessage(lwnd, WM_CAP_SET_SCALE, f, 0 )
Función final Aunque existen ciertos estándares para la producción de cámaras, no podemos garantizar que todas las cámaras se fabriquen de acuerdo con este estándar, especialmente las importaciones paralelas, falsificaciones y algunas marcas diversas. Si tu cámara es de una marca famosa, entonces no hay problema.