1
考虑了.NET控件下面被覆盖的OnPaint方法后恢复图形状态:我需要在我的OnPaint覆盖绘画(用于.NET控件)
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.RotateTransform(180);
// lots of drawing code
}
难道我做的一个问题当我完成时不恢复e.Graphics对象的状态?
在Java中,这通常是通过复制传递的Graphics对象来完成的,因此传递的Graphics对象不会被修改,也不需要恢复它的状态。 Similar Java Question
我可以通过使用Save()/ Restore()方法在.NET中实现这一点。所以我的问题是:
- 在.NET中恢复图形状态是否需要/最佳实践?
- Save()/ Restore()方法有多昂贵?
如果保存和恢复很快,那么我想我会用它们来恢复我的OnPaint结束时的状态。 – GarethOwen 2010-09-28 13:58:00
实际上,我没有看到你在绘图之前调用了base.OnPaint()*。这是不正确的,你应该允许客户端事件处理程序在你的顶部绘制。在底部放置base.OnPaint并在此之前调用Restore()。 – 2010-09-28 14:06:47
我不确定它是否不正确。我的基类是一个Panel,如果它有一个背景颜色或图像,我希望在绘制自己之前绘制它。 – GarethOwen 2010-09-28 15:22:49