在 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”显示。
现在一切正常。
我通过 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”显示。 现在一切正常。