0

我正在构建应用程序,它使用 StrechDIBits 在标签的 hdc 上绘制原始位图图像。

ptr = g->GetHdc();
dc = (HDC)ptr.ToInt32 ();
SetStretchBltMode (dc, COLORONCOLOR);
StretchDIBits (dc, 0, 0, (int) (LabelPictureShow->Width), (int) (LabelPictureShow->Height), 0, 0, width, height, data, bitmapInfo, DIB_RGB_COLORS, SRCCOPY);    
 g->ReleaseHdc (ptr);

通过这种方式,我绘制了整个视频流,一张接一张地从流中绘制,效果很好。我还具有在整个屏幕上调整表单和标签大小以实现全屏的功能,在播放视频时也很有效。

但是,当我停止视频或只发送一张图片并调用全屏功能时。它不会重新绘制图像,这是我的问题。我尝试在调整大小后使用窗体和标签的 Paint Event、Resize Event 再次绘制图像,但没有任何效果。当我全屏或恢复正常大小时,我的图像会短暂闪烁,但随后会被控件的颜色重新绘制并消失。我试图将绘画代码与 StretchDIBits 放在任何地方都没有任何效果。非常感谢任何帮助或建议。

编辑:对我来说可悲的是,当我将绘画代码放入,例如,标签的点击事件时,它工作正常......

4

1 回答 1

0

通过使用其他项目中使用的自定义 PaintBox 控件解决。此控件使用重写的 OnPaint 方法来重绘图像。不知何故,这个解决方案有效,但以前几乎相同的解决方案没有。

于 2011-05-11T17:10:32.900 回答