在Winform上以30fps以上的速度将原始图像显示为视频

问题描述

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

// 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坏了。 图像区域可以顺利刷新。 但是,如果有更改,其他组件将不会更新,从而导致问题。 (例如单选按钮,面板,标题栏等。) 当扩大图像的绘制区域时,似乎会发生这种情况。

由于在stackoverflow中引用了其他文章, 我可以检查一些相关信息,但是我无法使用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();
}

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

,

默认位图调整大小被认为很重。 “缩放模式”已更改为“无”。 调整图像大小以适合面板大小,然后再将其转换为位图。 (这种情况下,我使用opencvsharp resize / image.ToBitmap())

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...