我正在使用带有 Aforge 库的 C#、Winforms 应用程序从 USB 摄像头提取视频并操作该视频。
我通过使用新的帧事件处理程序并将该图像发布到图片框中来做到这一点。到目前为止,它运行良好并完成了我想要的。
但是,我最近发现我需要向应用程序添加软件缩放。我的解决方案是增加整体图像的大小,然后抓取新的更大图像的一部分,以符合我需要的测量值。这是在每个新帧上完成的。
int imageTopY;
int imageTopX;
Rectangle rect;
bitmap = new Bitmap(bitmap, new Size(bitmap.Width * zoomTrackBar.Value,
bitmap.Height * zoomTrackBar.Value));
imageTopY = ((bitmap.Height - height) / 2);
imageTopX = ((bitmap.Width - width) / 2);
if (imageTopY != 0 && imageTopX != 0)
rect = new Rectangle(imageTopX, imageTopY, width, height);
else
rect = new Rectangle(0, 0, width, height);
bitmap = (Bitmap)bitmap.Clone(rect, bitmap.PixelFormat)
这也可以满足我的需要。但是,它根本没有效率。当缩放级别达到 3 时,视频变得异常滞后。视频源和正在发生的事情之间有 1-2 秒的延迟。我可以站起来跳一段小舞,当我坐在椅子上时,视频中的我开始跳一段小舞 :-P
关于更好地实现我想要做的事情的任何建议?也许更精简的东西?