寻找更高效的软件缩放

时间:2013-05-08 17:44:58

标签: c# winforms video performance aforge

我正在使用带有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)

这也是我需要的。但是,它根本没有效率。当zoome级别达到3时,视频变得特别滞后。视频输入与正在进行的操作之间存在1-2秒的延迟。我可以站起来跳舞,当我坐在椅子上时,视频中的我开始做一个小舞蹈:-P

有关更好地实现我想要做的事情的任何建议吗?也许更精简的东西?

1 个答案:

答案 0 :(得分:2)

不要放大整体图像,而是剪切您希望放大的部分并用该图像填充窗口。这样,您始终拥有视频窗口的最大图像大小,并且不会将整个图像放大到窗口的约束之外。