我可以在 VB 中数字缩放我的网络摄像头吗?
Can I digitally zoom my webcam feed in VB?
我正在接手几年前其他人在这里中断的项目。我正在使用 Visual Studio 2012,应用程序是用 VB 编写的 win 表单。我有一个 window 显示我的网络摄像头的提要和快照图片,但我需要添加缩放功能(数字方式,因为网络摄像头没有光学变焦。)
目前项目使用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 来处理这个问题。
我正在接手几年前其他人在这里中断的项目。我正在使用 Visual Studio 2012,应用程序是用 VB 编写的 win 表单。我有一个 window 显示我的网络摄像头的提要和快照图片,但我需要添加缩放功能(数字方式,因为网络摄像头没有光学变焦。)
目前项目使用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 来处理这个问题。