【问题标题】:Looking for more efficient software zoom寻找更高效的软件缩放
【发布时间】:2013-05-08 17:44:57
【问题描述】:

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

有什么更好的方法来实现我想要做的事情吗?也许更精简?

【问题讨论】:

  • 我认为您想从视频中剪下一小部分,然后放大该部分以适应该区域。这样每次放大时,你只是放大到一个设定的大小,永远不会过度
  • 这解决了我的问题。您能否将此作为答案重新发布,以便我给予您信任?
  • 很高兴它有帮助!过去我不得不做类似的事情。

标签: c# winforms video performance aforge


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多