|
|
- - - - - - - - - - - - - - ผู้ให้การสนับสนุน- - - - - - - - - - - - - -
|
|
|
กระทู้ #1549 [.NET] (จาก IP: 58.8.93.22)
อยากทราบวิธีพัฒนาโปรแกรมให้เครื่อง PC 1 ตัวต่อได้กับกล้อง webcam หลายตัว
อยากทราบวิธีพัฒนาโปรแกรมให้เครื่อง PC 1 ตัวต่อได้กับกล้อง webcam หลายตัว ถ้าผู้ใดเคยมีประสบการณ์ทางด้านนี้ช่วยเข้ามาให้คำแนะนำด้วยนะครับ
|
จากคุณ
:
นายสงสัย [2007-11-14 13:09:56]
|
|
ความคิดเห็น #26232 (จาก IP: 58.8.194.97)
http://www.thaiio.com/prog-cgi/vbnetwebcam.html |
จากคุณ
:
sup98 [2007-11-14 21:03:24]
|
|
ความคิดเห็น #26233 (จาก IP: 58.8.194.97)
Const WM_CAP As Short = &H400S Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP + 10 Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP + 11 Const WM_CAP_EDIT_COPY As Integer = WM_CAP + 30 Const WM_CAP_SET_PREVIEW As Integer = WM_CAP + 50 Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP + 52 Const WM_CAP_SET_SCALE As Integer = WM_CAP + 53 Const WS_CHILD As Integer = &H40000000 Const WS_VISIBLE As Integer = &H10000000 Const SWP_NOMOVE As Short = &H2S Const SWP_NOSIZE As Short = 1 Const SWP_NOZORDER As Short = &H4S Const HWND_BOTTOM As Short = 1
Dim iDevice As Integer = 0 ' device ID ปัจจุบันในเครื่อง Dim hHwnd As Integer ' ค่า Handle สำหรับการแสดงภาพในแตกละวิโดส์ว
' เรียก API function จาก AVI capture DLL.
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, _ ByVal lParam As Object) As Integer
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Integer, _ ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, _ ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer
Declare Function DestroyWindow Lib "user32" (ByVal hndw As Integer) As Boolean
Declare Function capCreateCaptureWindowA Lib "avicap32.dll" _ (ByVal lpszWindowName As String, ByVal dwStyle As Integer, _ ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _ ByVal nHeight As Short, ByVal hWndParent As Integer, _ ByVal nID As Integer) As Integer
Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Short, _ ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, _ ByVal cbVer As Integer) As Boolean ' ติดต่อ device ของกล้อง.
Private Sub LoadDeviceList() Dim strName As String = Space(100) Dim strVer As String = Space(100) Dim bReturn As Boolean Dim x As Integer = 0
' เรียกรายชื่อของ device กล้องทั้งหมดในเครื่องคอมของเรา และโชว์ใน List Box ที่ชื่อ lstDevices .
Do ' เรียกชื่อ Driver และ version bReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100) ' ถ้าใช่ device ให้เพิ่มชื่อเข้าไปใน list box If bReturn Then lstDevices.Items.Add(strName.Trim) x += 1 Loop Until bReturn = False End Sub
' แสดงผลของรูปภาพเคลื่อนไหวออกที่หน้าฟอร์มโปรแกรมที่เราสร้าง
Private Sub OpenPreviewWindow() Dim iHeight As Integer = picCapture.Height Dim iWidth As Integer = picCapture.Width
' เปิดแสดงผลที่ picturebox . ' สร้าง window ลูก ขึ้นมาด้วย ฟังชั่น capCreateCaptureWindowA ซึ่งคุณสามารถเห็นใน picturebox.
hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, _ 480, picCapture.Handle.ToInt32, 0)
' ติดต่อกับ device If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
' ตั้งค่า preview scale SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0)
' ตั้งค่า preview rate ในระดับ milliseconds SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0)
' เริ่มต้นการแสดงภาพ จากงกล้อง SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0)
' หรับขนาด window ให้เท่ากับใน picturebox SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, picCapture.Width, picCapture.Height, _ SWP_NOMOVE Or SWP_NOZORDER) btnSave.Enabled = True btnStop.Enabled = True btnStart.Enabled = False Else ' การติดต่อdevice Error ให้ ปิด window DestroyWindow(hHwnd) btnSave.Enabled = False End If End Sub ' ใช้ฟังก์ชั่นชื่อ SendMessage ไป copy ข้อมูลไว้ใน clipboard ซึ่งย้ายภาพไปที่ picture box.
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click Dim data As IDataObject Dim bmap As Image ' Copy ภาพ ไป clipboard SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0)
'นำ ภาพ จาก clipboard และ convert มันไปเป็น bitmap data = Clipboard.GetDataObject() If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then bmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Image) picCapture.Image = bmap ClosePreviewWindow() btnSave.Enabled = False btnStop.Enabled = False btnStart.Enabled = True If sfdImage.ShowDialog = DialogResult.OK Then bmap.Save(sfdImage.FileName, Imaging.ImageFormat.Bmp) End If End If End Sub
' ขั้นตอนสุดท้าย, การปิดแสดงภาพใน โปรแกรมของเรา,เลิกทำการติดต่อ device และ destroy (ทำลาย Object) ที่ เราสร้างขึ้นมาตอนต้นการเขียนโปรแกรม ที่ให้แสดงภาพ และปิดโปรแกรม
Private Sub ClosePreviewWindow() ' เลิกติดต่อกับ device SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0)
' ปิด window DestroyWindow(hHwnd) End Sub
|
จากคุณ
:
sup98 [2007-11-14 21:06:05]
|
|
ความคิดเห็น #26439 (จาก IP: 124.121.175.91)
ตรงบรรทัด If sfdImage.ShowDialog = DialogResult.OK Then bmap.Save(sfdImage.FileName, Imaging.ImageFormat.Bmp) End If
sfdImage คือไรค่ะ |
จากคุณ
:
all [2008-01-18 01:35:13]
|
|
|
- - - - - - - - - - - - - - ผู้ให้การสนับสนุน- - - - - - - - - - - - - -
|
|
|
|
|