|
วันนี้แอดมินขอนำเสนอการจับภาพ (Capture) และบันทึกไฟล์ภาพแบบ JPG ด้วยการใช้งาน Touchless SDK (Software Development Kit) ซึ่งเป็นชุดพัฒนาของฟรี สามารถทำการดาวน์โหลดได้ที่ http://touchless.codeplex.com สามารถนำไปประยุกต์ใช้งานได้หลากหลายอย่างมากมาย เช่น ถ่ายรูปติดบัตรนักเรียน นักศึกษา ผู้เข้าสอบ ผู้เข้าร่วมประชุมอบรม สัมมนา การจัดเก็บข้อมูลภาพวัสดุ ครุภัณฑ์ สินค้าที่มีหลากหลายมุมมอง ฯลฯ ... ส่วนกล้องนอกจากจะใช้ WebCam เรายังสามารถต่อเชื่อมกับโทรศัพท์ระบบปฏิบัติการ Android ได้ด้วย โดยการใช้ DroidCam เข้าช่วยครับผม ...
หลักการทำงานของโปรแกรม ... ค้นหากล้องเว็บแคมเข้ามาเก็บไว้ใน ComboBox จากนั้นทำการเลือกกล้องที่ต้องการ แล้วก็กดปุ่ม Capture (แอดมินลืมทำฟังค์ชั่นคีย์ให้) แล้วกดปุ่ม Save เพื่อบันทึกภาพลงในโฟลเดอร์ Images และทำการแสดงผลลงไปในตารางกริด โดยเราสามารถลบไฟล์ทิ้งได้ด้วย ในกรณีที่เปิดโปรแกรมขึ้นมาใหม่ ก็จะทำการค้นคืนภาพ (Retrieve) ภาพ JPG ในโฟลเดอร์ Images เอากลับมาแสดงผลในตารางกริด ...
การเรียกใช้ไฟล์ TouchlessLib.DLL และต้องนำไฟล์ WebCamLib.DLL ไปเก็บไว้ที่ไฟล์ Execute รันด้วย ...
มาดูโค้ดฉบับเต็มกันเถอะ ...
- Imports System.Threading
- Imports TouchlessLib
- Imports System.IO
- Public Class frmCamera
- Dim WebCamMgr As TouchlessLib.TouchlessMgr
- Dim strImagePath As String
- Private Sub frmCamera_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
- Try
- Timer1.Enabled = False
- WebCamMgr.CurrentCamera.Dispose()
- WebCamMgr.Cameras.Item(cmbCamera.SelectedIndex).Dispose()
- WebCamMgr.Dispose()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- End Sub
- Private Sub frmCamera_Load(sender As Object, e As System.EventArgs) Handles Me.Load
- WebCamMgr = New TouchlessLib.TouchlessMgr
- Label2.Text = ""
- For i As Integer = 0 To WebCamMgr.Cameras.Count - 1
- cmbCamera.Items.Add(WebCamMgr.Cameras(i).ToString)
- Next
- If cmbCamera.Items.Count >= 0 Then
- cmbCamera.SelectedIndex = 0
- Timer1.Enabled = True
- btnSave.Enabled = False
- '// Create a folder in VB if it doesn't exist.
- strImagePath = MyPath(Application.StartupPath) & "Images"
- If (Not System.IO.Directory.Exists(strImagePath)) Then
- System.IO.Directory.CreateDirectory(strImagePath)
- End If
- '// Initialized and load images into DataGridView.
- Call InitDataGridView()
- Call LoadImage2DatagridView()
- Else
- MessageBox.Show("No Web Camera, This application needs a webcam.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
- Me.Close()
- End If
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub LoadImage2DatagridView()
- Dim directory As New IO.DirectoryInfo(strImagePath)
- If directory.Exists Then
- Dim jpgFiles() As IO.FileInfo = directory.GetFiles("*.jpg")
- Dim row As String()
- Dim iArr() As String
- For Each jpgFile As IO.FileInfo In jpgFiles
- iArr = Split(jpgFile.FullName, "")
- row = New String() {iArr(UBound(iArr))}
- dgvData.Rows.Add(row)
- Using FS As IO.FileStream = File.Open(jpgFile.FullName, FileMode.Open)
- Dim bitmap As Bitmap = New Bitmap(FS)
- Dim currentPicture As Image = CType(bitmap, Image)
- Me.dgvData.Rows(Me.dgvData.Rows.Count - 1).Cells(1).Value = currentPicture
- End Using
- Next
- End If
- Label2.Text = "Total Images : " & Me.dgvData.Rows.Count
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
- If picPreview Is Nothing Then Exit Sub
- '/ Create file name
- Dim sTempFileName As String = strImagePath & Format(Now, "ddMMyy-hhmmss") & ".jpg"
- Dim b As Bitmap = picPreview.Image
- b.Save(sTempFileName, System.Drawing.Imaging.ImageFormat.Jpeg)
- '//
- Dim iArr() As String
- iArr = Split(sTempFileName, "")
- Dim row As String()
- '// Show File name.
- row = New String() {iArr(UBound(iArr))}
- dgvData.Rows.Add(row)
- '// Load Image into DataGridView.
- Using FS As IO.FileStream = File.Open(sTempFileName, FileMode.Open)
- Dim bitmap As Bitmap = New Bitmap(FS)
- Dim currentPicture As Image = CType(bitmap, Image)
- Me.dgvData.Rows(Me.dgvData.Rows.Count - 1).Cells(1).Value = currentPicture
- End Using
- Label2.Text = "Total Images : " & Me.dgvData.Rows.Count
- Me.dgvData.Focus()
- SendKeys.Send("^{HOME}")
- SendKeys.Send("^{DOWN}")
- '// Delay Time. Prevent to save duplicate file name.
- btnSave.Enabled = False
- Threading.Thread.Sleep(1000) ' ms
- btnSave.Enabled = True
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub dgvData_DoubleClick(sender As Object, e As System.EventArgs) Handles dgvData.DoubleClick
- If Me.dgvData.Rows.Count = 0 Then Return
- frmShowImage.ShowDialog()
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub InitDataGridView()
- Me.dgvData.Columns.Clear()
- '// Initialize DataGridView Control
- With dgvData
- .AllowUserToAddRows = False
- .AllowUserToDeleteRows = False
- '.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- '.AutoResizeColumns()
- .AllowUserToResizeColumns = True
- .AllowUserToResizeRows = True
- .SelectionMode = DataGridViewSelectionMode.FullRowSelect
- End With
- dgvData.RowTemplate.Height = 120
- '// Declare columns type.
- '// Add 1th column (Index = 0), Show image file name.
- Dim FName As New DataGridViewTextBoxColumn()
- dgvData.Columns.Add(FName)
- With FName
- .HeaderText = "File Name"
- .ReadOnly = True
- .Visible = True
- .Width = Me.dgvData.Width \ 2 + 65
- End With
- '// Add 2th column (Index = 1), It's Image.
- Dim imgCol As New DataGridViewImageColumn()
- With imgCol
- .HeaderText = "Image"
- .Name = "img"
- .ImageLayout = DataGridViewImageCellLayout.Stretch
- .Width = 120
- End With
- dgvData.Columns.Add(imgCol)
- '//
- Me.dgvData.Focus()
- End Sub
- Private Sub cmbCamera_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbCamera.SelectedIndexChanged
- WebCamMgr.CurrentCamera = WebCamMgr.Cameras.ElementAt(cmbCamera.SelectedIndex)
- '//
- 'WebCamMgr.CurrentCamera.CaptureHeight = 480
- 'WebCamMgr.CurrentCamera.CaptureWidth = 640
- End Sub
- Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
- picFeed.Image = WebCamMgr.CurrentCamera.GetCurrentImage()
- End Sub
- Private Sub btnCapture_Click(sender As System.Object, e As System.EventArgs) Handles btnCapture.Click
- picPreview.Image = WebCamMgr.CurrentCamera.GetCurrentImage()
- btnSave.Enabled = True
- End Sub
- Private Sub frmCamera_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
- If Me.dgvData.Columns.Count > 0 Then
- With Me.dgvData.Columns(0)
- .Width = Me.dgvData.Width \ 2 + 65
- End With
- End If
- End Sub
- Private Sub btnDelete_Click(sender As System.Object, e As System.EventArgs) Handles btnDelete.Click
- If Me.dgvData.Rows.Count = 0 Then Return
- Try
- '// Delete files in folder.
- FileSystem.Kill(strImagePath & dgvData.CurrentRow.Cells(0).Value.ToString)
- '// Delete current row from dgvData
- dgvData.Rows.Remove(dgvData.CurrentRow)
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ฟอร์มของการนำภาพมาแสดงอีกหน้าจอ ...
- Public Class frmShowImage
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- Private Sub frmShowImage_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- picData.Image = Image.FromFile(MyPath(Application.StartupPath) & "Images" & frmCamera.dgvData.CurrentRow.Cells(0).Value.ToString)
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
โมดูลในการกำหนดตำแหน่งไฟล์พาร์ธต่างๆ ...
- Module modFunction
- ' / Get my project path
- ' / Ex.
- ' / AppPath = C:\My Project\bin\debug
- ' / Replace "\bin\debug" with ""
- ' / Return : C:\My Project\
- Public Function MyPath(AppPath As String) As String
- '/ MessageBox.Show(AppPath);
- AppPath = AppPath.ToLower()
- MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "")
- '// Check the backslash symbol (ASCII Code = 92) on the far right. If not, add one at the end.
- If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
- End Function
- End Module
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดฉบับเต็ม VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|