我的应用程序正在从外部硬件接收数据并将其绘制到面板上(实际上可以是“控制”的任何其他子项)。绘画当前发生在“OnPaint”回调中。列表用于存储最近收到的数据,以允许在 OnPaint 中重绘整个图形,以在调整窗口大小时获得正确的比例。
图形本身是e->Graphics
使用两个数据点之间的线与元素一起绘制的。
这工作正常,但是当我每 50 毫秒收到新数据(= 重新绘制整个图表)时,图表很快开始闪烁。需要绘制的数据越多,闪烁越强(当到达控件的右侧时,数据缓存被清除,因此图中的最大数据点数是有限的)。
我的代码的主要部分:
void Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e)
{
Size^ s = m_Control->Size;
Bitmap^ bmp = gcnew Bitmap(s->Width, s->Height);
Graphics^ g = Graphics::FromImage(bmp);
for each(double y in m_Data)
{
/* ...calculations etc... */
g->DrawLine(Pens::Blue, recentX, recentY, currentX, currentY);
}
e->Graphics->DrawImageUnscaled(bmp, 0, 0);
}
有什么建议可以优化绘画以消除闪烁吗?提前致谢!