Kepengen gak sich kira2 kamu tahu gimana tuh Messenger2 bisa nampilin gambar kamu di aplikasi mereka??? Apalagi kalo kita bisa video chat. Wah seru kali yeee. Tapi untuk pokok bahasan kali ini aku cuma kepengen fokus dulu sama gimana caranya gabungin webcam di aplikasi kamu. Ntar kali yee untuk video Chat aku bikin topik baru lagi... Oke Bos???
Pada topik kali ini kita akan berhubungan dengan yang namanya Programming Video For Windows. Sebelum kita memulai, pastikan komputer kamu sudah ada webcamnya. trus kalo bisa dah diinstall juga drivernya. pokoknya kamu bisa lihat wajah kamu sendiri. alias dah dicoba dulu gitu loh.. Cara nyobanya, buka windows explorer (Windows XP yaa). trus lanjutkan klik webcam kamu di bawah drive. kalo gak salah deket2 sama My Network Places deh.. Kalo emang dah bener install drivernya pasti gambar kamu muncul deh... hihihi... lanjut ya..
Aplikasi kita kali ini memanfaatkan Win32 API nya windows XP. Melalui Win32 API ini kita capture gambar video kamu trus dimasukkan ke window aplikasi kamu. Ada beberapa langkah yang harus dilakukan untuk proses capturing ini :
1. Buat window untuk nampung cap
Pada proses ini kita manfaatkan capCreateCaptureWindowA function.
Waktu fungsi ini dipanggil handlenya tuh window baru trus kamu bisa bagusin deh window kamu dengan mengubah-ubah style paramaternya.
lwndC = capCreateCaptureWindowA("My Capture Window", WS_CHILD Or WS_VISIBLE, 0, 0, 160, 120, Me.hwnd, 0)
Ini cuma contoh aja. definisi fungsi, parameter dan konstantanya dah aku buatin di modul VB6.
2. Nyambungin Window yang tadi dah dibuat ke video drivernya
iya dong... kan supaya aplikasi tahu yang mo dicapture tuh webcam yang mana.. tul gak??? Perintahnya adalah :
SendMessage lwnd, WM_CAP_DRIVER_CONNECT, 0, 0. Tapi aku dah modif jadi gampang :
capDriverConnect lwnd, 0
- passing String ke SendMessage :
Declare Function SendMessageS Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As String) As Long
- Passing Struktur ke SendMessage :
Dim CAP_PARAMS As CAPTUREPARMS
capCaptureGetSetup lwndC, VarPtr(CAP_PARAMS), Len(CAP_PARAMS)
- Proses Gambar dari Video Stream :
capSetCallbackOnFrame lwndC, AddressOf MyFrameCallback
MyFrameCallback, Itu fungsi yang setiap kali pasti dipanggil kalo ada frame baru yang diterima dari video drivernya. Trus kamu tangkep handlenya yang didefinisikan sebagai VIDEOHDR.
Type VIDEOHDRdimana lpData adalah data aktual dari devicenya. Berikut ini contoh fungsinya yang dah siap dipake.
lpData As Long '// address of video buffer
dwBufferLength As Long '// size, in bytes, of the Data buffer
dwBytesUsed As Long '// see below
dwTimeCaptured As Long '// see below
dwUser As Long '// user-specific data
dwFlags As Long '// see below
dwReserved(3) As Long '// reserved; do not use
End Type
Function MyFrameCallback(ByVal lwnd As Long, ByVal lpVHdr As Long) As LongRtlMoveMemory, itu juga harus dideklarasikan dulu lho... kayak gini nih contohnya :
Debug.Print "FrameCallBack"
Dim VideoHeader As VIDEOHDR
Dim VideoData() As Byte
'//Fill VideoHeader with data at lpVHdr
RtlMoveMemory VarPtr(VideoHeader), lpVHdr, Len(VideoHeader)
'// Make room for data
ReDim VideoData(VideoHeader.dwBytesUsed)
'//Copy data into the array
RtlMoveMemory VarPtr(VideoData(0)), VideoHeader.lpData, VideoHeader.dwBytesUsed
Debug.Print VideoHeader.dwBytesUsed
Debug.Print VideoData
End Function
Declare Sub RtlMoveMemory Lib "kernel32" (ByVal hpvDest As Long, ByVal hpvSource As Long, ByVal cbCopy As Long)
Udahan dulu yach... Aku punya source code lengkap untuk webcam sederhana ini... Jgn lupa kasih komentar yg bagus2 yach... Aku kan capek dah nulis lho! hihihi....
>>Webcam-Simple
>>Webcam-Advanced
>>Password : sholat
Wass,
Arnie