視頻採集: 捕捉圖像與 AVI 視頻

这个VB.NET示例程序演示的是如何使用 IC Imaging Control 同時捕捉AVI文件和JPEG圖像。
語言:.NET C#/Visual Basic
版本:3.0.3
发布于:1965年4月9日
作者:IC Imaging Control 技術支持部
需求:IC Imaging Control >2.1
由WDM數據流類驅動程序驅動的相機、視頻轉換器或圖像採集卡

Screenshot of this sample.

這個程序將用到一個專門將圖像存為JPEG文件的幀濾鏡,該幀濾鏡被包含在這個示例程序的安裝文件中。 示例程序將實現下列操作:

  • 使用IC Imaging Control內置對話框開啟設置一台視頻捕捉設備。
  • 在程序開始時保存當前視頻設備,加載最近一次使用的視頻設備。
  • 將實時影像的尺寸設為 IC Imaging Control 的窗體大小。
  • 在一個組合框中列出所有編碼。
  • 如編碼提供屬性對話框,顯示其屬性對話框。
  • 暫停和繼續捕捉AVI文件。
  • 在錄製AVI文件時抓取並保存圖像。

上面列出的大部分工作都在其它示例程序中有詳細的解釋,所以這裡只介紹如何使用"Save Image"幀濾鏡。 首先,在窗體的開始聲明一個 TIS.Imaging.FrameFilter 類型的變量, 將其命名為 SnapImageFilter,這個變量將被用於訪問幀濾鏡。

[VB.NET]
Dim SnapImageFilter As TIS.Imaging.FrameFilter

程序在 Form1_load sub 中調用"Save Image"幀濾鏡。在嘗試調用濾鏡後, 判斷 SnapImageFilter 的內容是否為 Nothing。如 SnapImageFilterNothing,說明濾鏡未被加載,原因可能是 濾鏡文件 SaveImageFrameFilter.FTF 不在應用程序的目錄裡、或不在 IC Imaging Control的OCX路徑上。 IC Imaging Control的OCX路徑通常是目錄 Common Files\ICImagingControl3。 從本頁上方鏈接出下載的示例安裝程序將會把這個濾鏡文件安裝在正確的文件夾中。

SnapImageFilter 被成功加載,它將被插入IC Imaging Control的設備路徑中。

[VB.NET]
SnapImageFilter = IcImagingControl1.FrameFilterCreate("Save Image", "")
If SnapImageFilter Is Nothing Then
    MessageBox.Show("Failed to load the Snap Image filter", "Filter Loading", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Else
    IcImagingControl1.DeviceFrameFilters.Add(SnapImageFilter)
End If

程序窗體中應有一個按鈕用於保存圖像,所以程序中也應有相應的按鈕處理程序。 在保存圖像之前,在按鈕處理程序btnSnapImage_Click中需要檢查:

  • 是否已加載一個有效視頻捕捉設備?
  • 是否正在播放現場視頻?
  • SnapImageFilter 是否為 Nothing

SnapImageFilter 的參數 "ImageName" 必須被設為一個有效的文件名, 這樣 SnapImageFilter 才能保存圖像。由於這個參數在程序線程和IC Imaging Control 視頻現成之間相互傳遞,它必須被置於 BeginParameterTransferEndParameterTransfer 的調用中。在設置好參數 "ImageName" 後, SnapImageFilter 將捕捉下一幀傳回的圖像。

[VB.NET]
Private Sub btnSnapImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSnapImage.Click
    With IcImagingControl1
        If .DeviceValid = True Then
            If .LiveVideoRunning = True Then
                If Not SnapImageFilter Is Nothing Then
                    ImageCounter = ImageCounter + 1
                    Dim ImageFileName As String
                    ImageFileName = String.Format("Image{0}.jpg", ImageCounter)
                    SnapImageFilter.BeginParameterTransfer()
                    ' Passing the image name to the SnapImageFilter will snap the image
                    SnapImageFilter.SetStringParameter("ImageName", ImageFileName)
                    SnapImageFilter.EndParameterTransfer()
                End If
            End If
        End If
    End With
End Sub

相關源代碼示例

責任聲明
IC Imaging Control源代碼庫中的所有代碼均只用於教學目的,The Imaging Source Europe GmbH作為IC Imaging Control的開發製造商,不對任何由於使用本文或其中源代碼所產生的後果承擔責任。

该网站为The Imaging Source网络的一部分。其它的站点包括 公司, Imaging, 天文相機, Astronomy Cameras Blog, Blog caméras d'astronomie, 天文相機有獎競答, TX Text Control, LiveDocx, phpLiveDocxForum.