在 winform 上将原始图像显示为视频(超过 30fps)

Display raw image as video on winform (over 30fps)

我通过 USB 每秒接收 30 张原始图像。 (实时摄像头图像/但不是网络摄像头)

// raw image is Format32bppPArgb Bitmap

while ( true ) // Recevie Image loop Using Task
{
    ...
    picturebox1.Image = raw_image;
    // panel1.BackgroundImage = raw_image; // or using panel to display
    ...
}

我更新了图像,使其看起来像视频。 当图像为 15fps 时,程序运行正常。 但是 30fps,GUI 坏了。 图像区域刷新流畅且良好。 但是其他组件有变化就不会更新,造成问题。 (如单选按钮、面板、标题栏等。) 当绘制图像的区域变宽时,这种情况似乎很明显。

由于参考了Whosebug中的其他文章, 查了一些相关资料,用winform也没法解决清楚。 看来通过winform很难用这种方式快速重绘。 (不知道我说的对不对。)

有什么好的方法或者关键字可以解决这个问题吗? 感谢阅读。

我遇到了类似的问题。当我在周围控件发生任何变化时调用 Refresh()Update() 函数时,它帮助了我。

// Label is only example, you can user any control you like
private void ChangeLabel()
{
    label1.text = "new text";
    label1.Refresh();
    label1.Update();
}

也许只添加其中一个功能就足够了。

默认的位图调整大小被认为很重。 'zoom mode' 已更改为 'none'。 在将图像制作成位图之前,已调整图像大小以适合面板大小。 (在这种情况下,我使用 opencvsharp resize / image.ToBitmap() )

图像已创建并调用 invalidate()。 通过面板的“onpaint 事件”中的“Graphics.DrawImage”显示。 现在一切正常。