Articles
|
|
Please use FireFox to view this page
This website has been designed for use with the FireFox browser. Please use FireFox to view this page.
Most properties for the webcam are set and retrieved using
windows messaging, that is, using the SendMessage API to issue windows messages
(WM_) to the capture window. This is quite an arcane means of setting
properties, so it is best that we encapsulate these into separate functions as
follows:
Function capDriverConnect(ByVal lwnd As Integer, ByVal i As Short) _
As Boolean
capDriverConnect =
SendMessage(lwnd, WM_CAP_DRIVER_CONNECT, i, 0)
End Function
The
capDriverConnect API call connects a VFW driver to a previously created capture
window. The ‘i’ parameter is the index of the driver, which, in this
application is always set to 0, but when used with multiple drivers, could be
any number between 0 and 10.
Function capDriverDisconnect(ByVal lwnd As Integer) As Boolean
capDriverDisconnect =
SendMessage(lwnd, WM_CAP_DRIVER_DISCONNECT, _
0, 0)
End Function
The
capDriverDisconnect gracefully disconnects a VFW driver from a capture window.
Failure to call this method before exiting the application could stop other
webcam applications from accessing the camera.
Function capSetVideoFormat(ByVal hCapWnd As Integer,ByRef
BmpFormat _
As BITMAPINFO, ByVal CapFormatSize As Integer) As Boolean
capSetVideoFormat =
SendMessageAsBitMap(hCapWnd, _
WM_CAP_SET_VIDEOFORMAT,
CapFormatSize, BmpFormat)
End Function
The
capSetVideoFormat API is used to indicate to the webcam the format of image to
be returned. Many cameras do not support all ranges of bitmap formats, however,
24 bit colour 320 x 240 and 640 x 480 are quite common.
Function capPreview(ByVal lwnd As Integer, ByVal f As Boolean) As _
Boolean
capPreview = SendMessage(lwnd,
WM_CAP_SET_PREVIEW, f, 0)
End Function
The
capPreview function is used to initiate the streaming of images between the VFW
driver and the capture window.
Function capPreviewRate(ByVal lwnd As Integer,ByVal wMS As Short)As _
Boolean
capPreviewRate =
SendMessage(lwnd, WM_CAP_SET_PREVIEWRATE, wMS, 0)
End Function
The capPreviewRate function determines the refresh rate by
specifying the refresh interval in milliseconds. In our case, it is set to 66
ms (15 Frames Per second).
Now, we must implement the two functions referenced by the
main form as follows –
Sub MapWebcamToWindow(ByRef lWidth As Integer, ByRef
lHeight As Integer,
ByRef hWnd As Integer)
Dim lpszName As New
VB6.FixedLengthString(100)
Dim bmp As BITMAPINFO
With bmp.bmiHeader
.biSize =
Len(bmp.bmiHeader)
.biWidth = 320
.biHeight = 240
.biPlanes = 1
.biBitCount = 24
End With
capGetDriverDescriptionA(0,lpszName.Value,100,Nothing,100)
lwndC =
capCreateCaptureWindowA(lpszName.Value, _
WS_VISIBLE Or WS_CHILD, 0, 0, lWidth, lHeight, hWnd, 0)
If capDriverConnect(lwndC, 0) Then
capPreviewRate(lwndC, 66)
capPreview(lwndC, True)
capSetVideoFormat(lwndC,
bmp, Len(bmp))
SetWindowPos(lwndC, 0, 0,
0, bmp.bmiHeader.biWidth, _
bmp.bmiHeader.biHeight,
SWP_NOMOVE Or SWP_NOZORDER)
End
If
End Sub
Page 2
Page 4
Copyright 2019 Infinite Loop Ltd.
|