我可以在VB中以数字方式缩放我的网络摄像头源吗?

时间:2016-11-11 21:54:54

标签: vb.net zoom webcam

我有点像几年前在其他人离开的地方选择一个项目。我使用的是Visual Studio 2012,该应用程序是一个用VB编写的win表单。我有一个窗口显示我的网络摄像头的进纸和快照图片,但我需要添加缩放功能(数码,因为网络摄像头没有光学变焦。)

目前,该项目使用DirectShowLib。显示视频的表单上的控件是实现ISampleGrabberCb的用户控件(书面上帝知道多久以前),但老实说我几乎不了解a / v的东西,而且这个项目需要更新STAT。

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。

您的网络摄像头只会生成位图帧。然后,您可以将它们绘制到您喜欢的任何表面上。最简单的方法是使用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在我的应用程序中处理它。