我正在构建应用程序,它使用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);
通过这种方式,我绘制了整个视频流,一张又一张的图片,完美无缺。我还有一个功能,它调整我的表格和标签在整个屏幕上实现全屏,wchich在播放视频时也很好用。
但是,当我停止视频或只发送一张图片并调用完整的scren功能时。它不会重新绘制图像,这是我的问题。我尝试使用Paint Event,Resize Event表单和标签在调整大小后再次绘制图像,但没有任何效果。当我获得全屏或恢复到正常尺寸时,我的图像会瞬间闪烁,但随后它会被控件的颜色重新绘制并消失。我试图将StretchDIBits的绘图代码放在任何地方都无效。任何帮助或建议都非常感谢。
编辑:对我来说可悲的是,当我把绘画代码放入时,例如点击标签的事件,它就可以了......
答案 0 :(得分:0)
使用在其他项目中使用的自定义PaintBox控件解决。此控件使用覆盖的OnPaint方法重新绘制图像。不知怎的,这个解决方案有效,但以前几乎相同的解决方案没有。