我是在做别人几年前放弃的项目。我使用的是Visual Studio 2012,应用程序是一个用VB编写的win forms。我有一个窗口显示我的网络摄像头的饲料和抓拍照片,但我需要添加缩放功能(数字,因为网络摄像头没有光学变焦)
目前,该项目使用DirectShowLib。显示视频的窗体上的控件是一个实现ISampleGrabberCb的用户控件(天知道是多久以前写的),但老实说,我对a/v的东西一无所知,这个项目需要更新STAT.
这是可能的。
你的网络摄像头将只是产生位图帧。然后你可以把它们画在任何你喜欢的表面上。最简单的方法是使用gdi函数。
这里有一个简短的大纲,它应该是什么样子
Dim mBitmap As Bitmap
Dim mZoomRect As Rectangle = New Rectangle(100, 100, 100, 100)
Public Sub OnFrameReceived(frame As Bitmap)
mBitmap = CType(frame, Bitmap)
'Tell the form to redraw itself.
Me.Invalidate()
End Sub
Private Sub MyPaintHandler(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
e.Graphics.DrawImage(mBitmap, Me.ClientRectangle, mZoomRect, GraphicsUnit.Pixel)
End Sub
你必须小心同步,因为你的帧到达的时间与你的图像被绘制的时间不同。你还需要注意位图何时被处置。当我这样做时,我克隆OnFrameReceived
处理程序中的位图,以便我负责其生命周期。
GDI相当慢。我现在在我的应用程序中使用OpenTK来处理这个