2013-05-08 57 views
1

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

任何关于更好的实现我所尝试的方式的建议去做?也许更精简?

+1

我想你想从视频中剪下一小段,然后放大该部分以适合该区域。这样,每当你放大时,你只是扩大到一个尺寸,从来没有这样做 – JeremyK 2013-05-08 17:54:52

+0

这解决了我的问题。你可以重新发布这个答案,所以我可以给你信用? – 2013-05-08 18:43:30

+0

很高兴帮助!过去我不得不做类似的事情。 – JeremyK 2013-05-08 18:54:57

回答

2

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