С.Т. писал(а):1 - это просто обязательный параметр nResrv, который может быть любым и ни на что не влияет.
Влияет единица при ОТКРЫТИИ камеры: OpenCapDev(1) - открытие в другом потоке асинхронно и вывод кадров по событию (но в VB падает при закрытии камеры), а OpenCapDev(0) - синхронное открытие без создания потока, кадры снимаются только через SnapOne(любое_число).
Этот OCX во всех моих вложениях в этой теме (например, в первом посте).
Ваш проект скачал, огромное спасибо, сейчас изучу...
Как раз он влияет на формат вывода. В твоём случае на выходе BMP картинка в формате MEDIASUBTYPE_RGB24:
- Код: Выделить всё
Option Explicit
Private Type BITMAPINFO
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Declare Function SetDIBitsToDevice Lib "gdi32" ( _
ByVal hdc As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal dx As Long, _
ByVal dy As Long, _
ByVal SrcX As Long, _
ByVal SrcY As Long, _
ByVal Scan As Long, _
ByVal NumScans As Long, _
ByRef Bits As Any, _
ByRef BitsInfo As BITMAPINFO, _
ByVal wUsage As Long) As Long
Private Declare Function GetMem4 Lib "msvbvm60" ( _
ByRef pSrc As Any, _
ByRef pDst As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" ( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)
Private Sub Form_Load()
TesoSeeu1.OpenCapDev 0, 0
End Sub
Private Sub Timer1_Timer()
Dim p As Long, o As Long
Dim b As BITMAPINFO
p = TesoSeeu1.SnapOne(1)
CopyMemory b, ByVal p + 14, Len(b)
GetMem4 ByVal p + 10, o
SetDIBitsToDevice Me.hdc, 0, 0, b.biWidth, b.biHeight, 0, 0, 0, b.biHeight, ByVal p + o, b, 0
End Sub
По факту этот контрол просто обертка над Sample Grabber фильтром из DirectShow.