原創|使用教程|編輯:郝浩|2013-09-06 14:32:15.000|閱讀 904 次
概述:在TVideoGrabber中,當啟用了視頻捕捉器時,可以在預覽、錄制以及回放中捕捉視頻幀。這個視頻捕捉器可以插入到預覽流、捕捉流或是兩者之間。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在TVideoGrabber中,當啟用了視頻捕捉器時,可以在預覽、錄制以及回放中捕捉視頻幀。這個視頻捕捉器可以插入到預覽流、捕捉流或是兩者之間。同時這個幀可以捕捉到內存位圖、BMP文件、JPEG文件、剪貼板(CF_BITMAP)。
一、直接復制來自OnFrameBitmap事件的當前視頻幀的BITMAP HANDLE。
對于每個經過視圖的視頻幀,會發生OnFrameBitmap事件,并允許直接捕捉位視圖字節。
這個方法需要更少的CPU,然而由于這個OnFrameBitmap事件是直接從一個線程調用,這個位圖handle以及位圖字節只是在事件發生的時候有效,所以你必須復制它們到另一個緩沖區。
這種方法的問題就在于它可能會減緩成像并造成一個不平穩的預覽,由于你添加到事件中的處理時間是包含在幀間隔中的,所以如果處理2幀的時間比幀率更長,這個幀就會被丟棄。
所以,建議通過調用StartPreview進行視圖預覽時,如果在這種情況下,如果在錄制(這個可能會產生一個不平穩的錄制)或是在回放期間(也可能會不平穩),丟棄幀也不是那么重要。
二、直接捕捉當前幀(或是之前幀)
調用GetLastFrameAsHBitmap (所有版本)或 GetLastFrameAsTBitmap (僅Delphi / C + + 生成器版本),根據你選擇的尺寸以及是否覆蓋來捕捉當前幀(或是之前幀)幀。這種方法并不會減慢成像,同時也不會出現丟幀的現象。
三、當前幀捕捉(或是在連拍模式下自動捕捉接下來的幀)
通過使用CaptureFrameTo(或啟用突發模式)以及OnFrameCaptureCompleted的事件。這種方法也不會減慢成像,同時也不會出現丟幀的現象。
有或沒有覆蓋:
如果應用程序執行的圖形或文字重疊,默認情況下,幀捕獲就會覆蓋。
啟用FrameCaptureWithoutOverlay的屬性,捕捉幀時就不會有覆蓋。
1、異步與同步幀捕獲
A、異步幀捕獲
調用CaptureFrameTo一幀接一幀的捕捉,這個函數就會發送“捕捉秩序”并立即退出。然后這個捕捉幀就會通過OnFrameCaptureCompleted事件返回。
突發模式自動捕捉幀
突發模式允許自動捕獲幀,模式可以通過啟用BurstMode屬性激活。
根據BurstType屬性,可捕捉幀到TBitmap、 BMP文件或是JPEG 文件。
如果BurstCount = 0,可以無限制的捕捉幀,否則當幀的一個BurstCount數被捕捉到,幀捕捉就會停止。
如果BurstInterval > 0,幀的一個BurstInterval數就會在每個幀捕捉之間跳過。
通過啟用BurstMode,就會激活突發模式。
突發模式無效的方法:
——禁用BurstMode
——如果BurstCount > 0,幀的一個BurstCount數就被捕捉到了。
當捕捉視頻幀到BMP和JPEG文件:
——當調用CaptureFrameTo或CaptureFrameSyncTo時,如果沒有文件名被調用,這個文件名就會自動生成(1)
——在突發模式中,文件名總是自動的生成(1)
(1)根據StoragePath,AutoFileName和AutoFilePrefix。
當執行幀疊加時,捕捉未修改的幀
通過使用幀疊加功能,當通過視頻幀繪制時,在默認的情況下,在幀已經重疊之后這個幀捕捉就會發生。
在疊加之前,啟用FrameCaptureWithoutOverlay的屬性來捕捉為修改的幀。
異步幀捕獲的例子
在打開剪輯之前,需要在這里設置UseClock = false,達到最大的播放速度。
VideoGrabber.BurstMode = true VideoGrabber.BurstCount = 5 VideoGrabber.BurstInterval = 10 VideoGrabber.BurstType = fc_BmpFile VideoGrabber.PlayerFileName = "... the file name of my video clip..." VideoGrabber.UseClock = false VideoGrabber.OpenPlayer
捕獲的幀的大小
默認值
——默認情況下,捕獲的幀的大小是當前視頻幀的尺寸,也就是VideoWidth 和 VideoHeight 屬性返回的尺寸。
尺寸縮放
——通過指定一個FrameCaptureZoomSize的百分比實現捕捉幀的大小的縮放。默認的值是100 (100%)。
自定義大小
——通過對FrameCaptureWidth和 FrameCaptureHeight指定值,可以拉伸幀的尺寸搭配到指定的寬度、 高度。對于這兩個屬性默認的值是-1,也就是禁用。
B、同步幀捕獲
該函數在返回之前將會等待的幀捕捉完成。
調用CaptureFrameSyncTo,這個函數將會等待幀捕捉,并通過OnFrameCaptureCompleted返回幀,成功后通過這個函數返回true,酷似上述的異步CaptureFrameTo。
如何捕獲矩形視頻幀
在調用CaptureFrameTo或CaptureFrameSyncTo之前調用SetFrameCaptureBounds(左,上,右,下) ,來實現一個矩形捕捉。
如何伸展捕獲視頻幀
指定FrameCaptureWidth或FrameCaptureHeight的值,隨意的調整視頻幀。
如何縮放捕獲的視頻幀
指定FrameCaptureZoomSize的縮放比例,調整捕獲幀的尺寸。
上下以及左右幀捕捉
調用SetFrameCaptureBounds以及制定底部替代頂部,或是左側替代右側就可以實現這種方式的捕捉。
>>>TVideoGrabber 下載
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件