Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > ช่วยทีครับ:: อยากได้Code จับภาพ Image โดยใช้กล้อง Webcam อะคับแล้วเซฟลง Database



 

ช่วยทีครับ:: อยากได้Code จับภาพ Image โดยใช้กล้อง Webcam อะคับแล้วเซฟลง Database

 



Topic : 070185



โพสกระทู้ ( 2 )
บทความ ( 0 )



สถานะออฟไลน์




คือผมได้ Code ของ VB6 มาอะครับ แล้วของผมใช้ VB 2010
ผมจะทำโปรแกรม ใช้ Webcam จับภาพความเคลื่อนไหว แล้วเซฟลง Database SQL อะคับ
ผมก็ไม่รู้จะเริ่มยังไง พอดีได้ Code มาแล้วลองแปลงแล้วมันมั่วๆ อะครับCode (VB.NET)

หน้งต่างหลัก Form

Const WM_CAP As Integer = &H400 
Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP + 10 'ติดต่อ webcam(โดยหาจาก driver) 
Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP + 11 'Disconect webcam อันนี้สำคัญทีเดียว 
Const WM_CAP_EDIT_COPY As Long = WM_CAP + 30 'Copy ภาพจาก frame buffer นำมาเก็บในรูปของ clipboard เอาไว้ใช้สำหรับ save ภาพนิ่ง(jpg,bmp..) 

Const WM_CAP_SET_PREVIEW As Long = WM_CAP + 50 'นำภาพจาก hardware มาเก็บที่ system memory แล้วนำมาแสดงบน window ผ่าน GDI function 
Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP + 52 'Set frame 
Const WM_CAP_SET_SCALE As Long = WM_CAP + 53 'ให้ able(True) หรือ disable scale(False) ภาพ 
Const WS_CHILD As Long = &H40000000 'Window style จ้า 
Const WS_VISIBLE As Long = &H10000000 'Window style จ้า 
Const SWP_NOMOVE As Long = &H2 
Const SWP_NOSIZE As Integer = 1 
Const SWP_NOZORDER As Integer = &H4 
Const HWND_BOTTOM As Integer = 1 

Dim iDevice As Long ' Device ID ที่รับได้ 
Dim hHwnd As Long ' Handle to preview window 

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 
Private Declare Function 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 
Private Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean 
Private Declare Function capCreateCaptureWindowA Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, ByVal hWndParent As Long, ByVal nID As Long) As Long 
Private Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Long, ByVal lpszName As String, ByVal cbName As Long, ByVal lpszVer As String, ByVal cbVer As Long) As Boolean 

Private Sub Form_Load() 
LoadDeviceList 'ก่อนอื่นต้องหาว่ามีกล้อง(webcam)ติดตั้งอยู่หรือไม่ 

If lstDevices.ListCount > 0 Then 
lstDevices.Selected(0) = True 'ถ้ามีก็ OKey เตรียมตัวคลิก start ได้เรยยย มัน enable แล้ว 
Else 
cmdStart.Enabled = False 'ถ้าไม่มีก็จบ(ห่) 
lstDevices.AddItem ("No Device Available") 
End If 

cmdStop.Enabled = False 
cmdSave.Enabled = False 
End Sub 

Private Sub LoadDeviceList() 'ส่วนนี้ใช้หาว่ามีการติดตั้ง webcam อยู่หรือไม่ 
Dim strName As String 
Dim strVer As String 
Dim iReturn As Boolean 
Dim x As Long 
x = 0 
strName = Space(100) 
strVer = Space(100) 
Do 
iReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100) ' โหลด Driver และ version 
If iReturn Then lstDevices.AddItem Trim$(strName) ' โหลดชื่อ Device ที่ detect ได้ลงใน lstDevices 
x = x + 1 
Loop Until iReturn = False 
End Sub 

Private Sub cmdStart_Click() 
iDevice = lstDevices.ListIndex 'โหลด Device(Driver)จาก list..... 
OpenPreviewWindow 'ไปดูการทำงานที่โปรแกรมย่อย OpenPreviewWindow 
End Sub 

Private Sub OpenPreviewWindow() 'เมื่อทุกอย่างพร้อมแล้วก็ลุยเรยยยยย 

hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, 480, picCapture.hwnd, 0) 'ให้รับภาพผ่านทาง picture box 

If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then 'ติดต่อ webcam 

SendMessage hHwnd, WM_CAP_SET_SCALE, True, 0 'ตั้งค่า scale ให้เป็น False เพราะขนาดภาพจริงจะถูก fix ไว้ ถ้าเป็น True ขนาดภาพจะขยายเท่ากับ window preview 

SendMessage hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0 'ตั้งค่า preview rate 

SendMessage hHwnd, WM_CAP_SET_PREVIEW, True, 0 'ให้เริ่มรับภาพ(True) จาก webcam 

cmdSave.Enabled = True 
cmdStop.Enabled = True 
cmdStart.Enabled = False 
Else 

DestroyWindow hHwnd 'ถ้ามีข้อผิดพลาดก็ให้ออกจาก window(แบบถูกที่ถูกทาง) 

cmdSave.Enabled = False 
End If 
End Sub 

Private Sub ClosePreviewWindow() 

SendMessage hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0 'ยกเลิกการติดต่อโดยใช้ message WM_CAP_DRIVER_DISCONNECT ถ้าไม่ออกวิธีนี้ error แน่นอน ลองดูสิ 

DestroyWindow hHwnd 'ออกจาก window 
End Sub 

Private Sub cmdStop_Click() 
ClosePreviewWindow 
cmdStop.Enabled = False 
cmdSave.Enabled = False 
cmdStart.Enabled = True 
End Sub 





Tag : .NET, C#, VS 2010 (.NET 4.x)









ประวัติการแก้ไข
2011-12-11 16:20:31
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-12-11 16:19:39 By : notkikkik View : 4369 Reply : 6
 

 

No. 1



โพสกระทู้ ( 708 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอนนี้โค้ดมันทำอะไรได้มั่งแล้วครับ ติดปัญหาอะไรครับ ผมยังไม่ได้ test code พอดีกำลังรอลง vb2010 อยู่






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-11 17:59:32 By : kerb
 


 

No. 2



โพสกระทู้ ( 708 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

เอาไปเท่านี้ก่อนนะครับ ปวดกะ SendMessage มากกว่าจะผ่าน ยัง save ไม่ได้นะครับ เหมือนมันจะมี bug นิดนึง อาจจะติดมั่งไม่ติดมั่ง ลองดูละกันครับ แก้ได้เอามาให้ผมมั่งละกัน

Code (VB.NET)
Public Class Form1

    Const WM_CAP As Integer = &H400
    Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP + 10 'ติดต่อ webcam(โดยหาจาก driver) 
    Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP + 11 'Disconect webcam อันนี้สำคัญทีเดียว 
    Const WM_CAP_EDIT_COPY As Long = WM_CAP + 30 'Copy ภาพจาก frame buffer นำมาเก็บในรูปของ clipboard เอาไว้ใช้สำหรับ save ภาพนิ่ง(jpg,bmp..) 

    Const WM_CAP_SET_PREVIEW As Long = WM_CAP + 50 'นำภาพจาก hardware มาเก็บที่ system memory แล้วนำมาแสดงบน window ผ่าน GDI function 
    Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP + 52 'Set frame 
    Const WM_CAP_SET_SCALE As Long = WM_CAP + 53 'ให้ able(True) หรือ disable scale(False) ภาพ 
    Const WS_CHILD As Long = &H40000000 'Window style จ้า 
    Const WS_VISIBLE As Long = &H10000000 'Window style จ้า 
    Const SWP_NOMOVE As Long = &H2S
    Const SWP_NOSIZE As Integer = 1
    Const SWP_NOZORDER As Integer = &H4S
    Const HWND_BOTTOM As Integer = 1

    Dim iDevice As Long ' Device ID ที่รับได้ 
    Dim hHwnd As Long ' Handle to preview window 


    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    ''Private Declare Function 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
    Private Declare Function DestroyWindow Lib "user32" (ByVal hndw As IntPtr) As Boolean
    Private 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 Integer, ByVal hWndParent As Integer, ByVal nID As Integer) As Integer
    Private Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Integer, ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, ByVal cbVer As Integer) As Boolean

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        LoadDeviceList() 'ก่อนอื่นต้องหาว่ามีกล้อง(webcam)ติดตั้งอยู่หรือไม่ 

        If lstDevices.Items.Count > 0 Then
            lstDevices.SelectedItem = True 'ถ้ามีก็ OKey เตรียมตัวคลิก start ได้เรยยย มัน enable แล้ว 
        Else
            cmdStart.Enabled = False 'ถ้าไม่มีก็จบ(ห่) 
            lstDevices.Items.Add("No Device Available")
        End If

        cmdStop.Enabled = False
        'cmdSave.Enabled = False
    End Sub

    Private Sub LoadDeviceList() 'ส่วนนี้ใช้หาว่ามีการติดตั้ง webcam อยู่หรือไม่ 
        Dim strName As String = Space(100)
        Dim strVer As String = Space(100)
        Dim iReturn As Boolean
        Dim x As Long = 0
        Do
            iReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100) ' โหลด Driver และ version 
            If iReturn Then lstDevices.Items.Add(strName.Trim) ' โหลดชื่อ Device ที่ detect ได้ลงใน lstDevices 
            x = x + 1
        Loop Until iReturn = False
    End Sub

    Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
        iDevice = lstDevices.SelectedIndex 'โหลด Device(Driver)จาก list..... 
        OpenPreviewWindow() 'ไปดูการทำงานที่โปรแกรมย่อย OpenPreviewWindow 
    End Sub

    Private Sub OpenPreviewWindow() 'เมื่อทุกอย่างพร้อมแล้วก็ลุยเรยยยยย 

        hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, 480, picCapture.Handle.ToInt32, 0) 'ให้รับภาพผ่านทาง picture box 

        If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then 'ติดต่อ webcam 

            SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0) 'ตั้งค่า scale ให้เป็น False เพราะขนาดภาพจริงจะถูก fix ไว้ ถ้าเป็น True ขนาดภาพจะขยายเท่ากับ window preview 

            SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0) 'ตั้งค่า preview rate 

            SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0) 'ให้เริ่มรับภาพ(True) จาก webcam 

            'cmdSave.Enabled = True
            cmdStop.Enabled = True
            cmdStart.Enabled = False
        Else

            DestroyWindow(hHwnd) 'ถ้ามีข้อผิดพลาดก็ให้ออกจาก window(แบบถูกที่ถูกทาง) 

            'cmdSave.Enabled = False
        End If
    End Sub

    Private Sub ClosePreviewWindow()

        SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0) 'ยกเลิกการติดต่อโดยใช้ message WM_CAP_DRIVER_DISCONNECT ถ้าไม่ออกวิธีนี้ error แน่นอน ลองดูสิ 

        DestroyWindow(hHwnd) 'ออกจาก window 
    End Sub

    Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click
        ClosePreviewWindow()
        cmdStop.Enabled = False
        'cmdSave.Enabled = False
        cmdStart.Enabled = True
    End Sub
End Class




ประวัติการแก้ไข
2011-12-11 21:00:41
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-11 20:56:37 By : kerb
 

 

No. 3



โพสกระทู้ ( 708 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

อันนี้ไปได้ Code มาจาก youtube ครับ ผมว่ามันมาจากแหล่งกันเดียวแหละชื่อ Property นี่คล้ายกันเลย เอามาก็ใช้ไม่ได้เหมือนกัน ต้องมาปรับนิดหน่อย อันนี้ผมปรับชื่อ Property ให้ตรงเรียบร้อยละ มี save รูปลงคอมเป็น bitmap ให้ด้วยครับ เอาไปปรับนิดหน่อย ส่วน bug มีเหมือนเดิม

Code (VB.NET)
Public Class Form1
    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
    Dim hHwnd As Integer
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    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 IntPtr) 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

    Private Sub LoadDeviceList()
        Dim strName As String = Space(100)
        Dim strVer As String = Space(100)
        Dim bReturn As Boolean
        Dim x As Integer = 0
        Do
            bReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100)
            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
        hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, 480, picCapture.Handle.ToInt32, 0)
        If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
            SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0)
            SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0)
            SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0)
            SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, picCapture.Width, picCapture.Height, SWP_NOMOVE Or SWP_NOZORDER)
            cmdSave.Enabled = True
            cmdStop.Enabled = True
            cmdStart.Enabled = False
        Else
            DestroyWindow(hHwnd)
            cmdSave.Enabled = False
        End If
    End Sub

    Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click
        Dim data As IDataObject
        Dim bmap As Image
        SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0)
        data = Clipboard.GetDataObject()
        If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
            bmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Image)
            picCapture.Image = bmap
            ClosePreviewWindow()
            cmdSave.Enabled = False
            cmdStop.Enabled = False
            cmdStart.Enabled = True
            If sfdImage.ShowDialog = DialogResult.OK Then
                bmap.Save(sfdImage.FileName, Imaging.ImageFormat.Bmp)
            End If
        End If
    End Sub

    Private Sub ClosePreviewWindow()
        SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0)
        DestroyWindow(hHwnd)
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        LoadDeviceList()
    End Sub

    Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
        OpenPreviewWindow()
        cmdStart.Enabled = False
        cmdStop.Enabled = True
    End Sub

    Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click
        ClosePreviewWindow()
        cmdStart.Enabled = True
        cmdStop.Enabled = False
    End Sub

    Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click, cmdStop.Click

    End Sub
End Class



ถ้าอยากได้ต้นฉบับ ผมเอามาจากที่นี่ครับ
http://www.youtube.com/watch?v=-dMQNlrkGWQ

ส่วนวิธีแก้ error ตรง SendMessage จากที่นี่ครับ
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-11 21:14:28 By : kerb
 


 

No. 4



โพสกระทู้ ( 2 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากๆครับ ใช้ได้ดีครับ ตามคลิปเลย แต่มันเป็นภาษา Vb.net อะครับ
พอดีผมอยากทำเป็น C# เลยงง กับการแปลงภาษานิแหละครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-12 23:21:24 By : notkikkik
 


 

No. 5



โพสกระทู้ ( 708 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

เด๋วผมนั่งแปลงให้นะครับ ของมแปบนึงครับไม่เคยเขียน C# เหมือนกัน อยากลอง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-13 03:08:23 By : kerb
 


 

No. 6



โพสกระทู้ ( 708 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

มาแล้วครับ ผมไม่ได้แยก class ให้นะครับ มาแบบงงๆ เพิ่งจะจับครั้งแรก

ตอนแรกเอา vb.net ไปแปลงจากเว็บนี้ก่อนครับ
http://www.developerfusion.com/tools/convert/vb-to-csharp/
ปรากฎว่า error เพียบ แต่ก็ยังพอช่วยได้บ้าง อย่างน้อยมันก็เติม semicolon(;) ให้เราครับ

แล้วก็ดูจาก manual ด้วยครับ ตอนหลัง search ไปเจอของดีเข้าให้ เอาไปดูได้เลยครับ
http://www.c-sharpcorner.com/uploadfile/yougerthen/integrate-the-web-webcam-functionality-using-C-Sharp-net-and-com-part-viii/
อันนี้ค่อนข้างดีทีเดียวดูจากที่เค้าอธิบายนะครับผมยังไม่ได้ลอง test code ดูว่า work มั้ย ส่วนของผม work แน่นอนครับ test แล้ว แปลงจาก vb.net ด้านบนครับ

Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        const short WM_CAP = 0x400;
        const int WM_CAP_DRIVER_CONNECT = WM_CAP + 10;
        const int WM_CAP_DRIVER_DISCONNECT = WM_CAP + 11;
        const int WM_CAP_EDIT_COPY = WM_CAP + 30;
        const int WM_CAP_SET_PREVIEW = WM_CAP + 50;
        const int WM_CAP_SET_PREVIEWRATE = WM_CAP + 52;
        const int WM_CAP_SET_SCALE = WM_CAP + 53;
        const int WS_CHILD = 0x40000000;
        const int WS_VISIBLE = 0x10000000;
        const short SWP_NOMOVE = 0x2;
        const short SWP_NOSIZE = 1;
        const short SWP_NOZORDER = 0x4;
        const short HWND_BOTTOM = 1;
        int iDevice = 0;
        int hHwnd;
        [DllImport("user32", EntryPoint = "SendMessageA")]
        public static extern int SendMessage(int hwnd, int wMsg, int wParam, [MarshalAs(UnmanagedType.AsAny)] object
lParam);
        [DllImport("user32", EntryPoint = "SetWindowPos")]
        public static extern int SetWindowPos(int hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
        [DllImport("user32")]
        public static extern bool DestroyWindow(int hndw);
        [DllImport("avicap32.dll")]
        public static extern int capCreateCaptureWindowA([MarshalAs(UnmanagedType.VBByRefStr)] ref String lpszWindowName, int dwStyle, int x, int y, int nWidth, short nHeight, int hWndParent, int nID);
        [DllImport("avicap32.dll")]
        public static extern bool capGetDriverDescriptionA(short wDriver, [MarshalAs(UnmanagedType.VBByRefStr)] ref String lpszName, int cbName, [MarshalAs(UnmanagedType.VBByRefStr)] ref String lpszVer, int cbVer);

        private void LoadDeviceList()
        {
            string strName = new String(' ',100);
            string strVer = new String(' ', 100);
            bool bReturn = false;
            short x = 0;
            do
            {
                bReturn = capGetDriverDescriptionA(x, ref strName, 100, ref strVer, 100);
                if (bReturn)
                    lstDevices.Items.Add(strName);
                x += 1;
            } while (!(bReturn == false));
        }

        private void OpenPreviewWindow()
        {
            string DeviceIndex = Convert.ToString(iDevice);
            int iHeight = picCapture.Height;
            int iWidth = picCapture.Width;
            hHwnd = capCreateCaptureWindowA(ref DeviceIndex, WS_VISIBLE | WS_CHILD, 0, 0, 640, 480, picCapture.Handle.ToInt32(), 0);
            if (SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0)!=0)
            {
                SendMessage(hHwnd, WM_CAP_SET_SCALE, -1, 0);
                SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0);
                SendMessage(hHwnd, WM_CAP_SET_PREVIEW, -1, 0);
                SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, picCapture.Width, picCapture.Height, SWP_NOMOVE | SWP_NOZORDER);
                cmdSave.Enabled = true;
                cmdStop.Enabled = true;
                cmdStart.Enabled = false;
            }
            else
            {
                DestroyWindow(hHwnd);
                cmdSave.Enabled = false;
            }
        }

        private void ClosePreviewWindow()
        {
            SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0);
            DestroyWindow(hHwnd);
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadDeviceList();
        }

        private void cmdStart_Click(object sender, EventArgs e)
        {
            OpenPreviewWindow();
            cmdStart.Enabled = false;
            cmdStop.Enabled = true;
        }

        private void cmdStop_Click(object sender, EventArgs e)
        {
            ClosePreviewWindow();
            cmdStart.Enabled = true;
            cmdStop.Enabled = false;
        }

        private void cmdSave_Click(object sender, EventArgs e)
        {
            IDataObject data = default(IDataObject);
            Image bmap = default(Image);
            SaveFileDialog sfdImage = new SaveFileDialog();
            sfdImage.Filter = "(*.bmp)|*.bmp";
            SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0);
            data = Clipboard.GetDataObject();
            if (data.GetDataPresent(typeof(System.Drawing.Bitmap)))
            {
                bmap = (Image)data.GetData(typeof(System.Drawing.Bitmap));
                picCapture.Image = bmap;
                ClosePreviewWindow();
                cmdSave.Enabled = false;
                cmdStop.Enabled = false;
                cmdStart.Enabled = true;
                if (sfdImage.ShowDialog() == DialogResult.OK)
                {
                    bmap.Save(sfdImage.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
                }
            }
        }
    }
}


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-12-13 04:52:18 By : kerb
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ช่วยทีครับ:: อยากได้Code จับภาพ Image โดยใช้กล้อง Webcam อะคับแล้วเซฟลง Database
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่