1

考虑以下用于 .NET 控件的重写 OnPaint 方法:

protected override void OnPaint(PaintEventArgs e)
{
   base.OnPaint(e);
   e.Graphics.RotateTransform(180);

   // lots of drawing code
}

完成后不恢复 e.Graphics 对象的状态是否有问题?

在 Java 中,这通常是通过制作传递的 Graphics 对象的副本来完成的,因此传递的 Graphics 对象不会改变,也不需要恢复它的状态。 类似的 Java 问题

我可以通过使用 Save() / Restore() 方法在 .NET 中实现这一点。所以我的问题是:

  • .NET 中恢复图形状态是否必要/最佳实践?
  • Save() / Restore() 方法有多贵?
4

1 回答 1

1

好吧,无论谁要为控件实现 Paint 事件,都会有一点惊喜。如果一切都总是旋转是有意义的,那么它可能是有效的,但这是由你决定的。

Graphics.Save + Restore 在我的笔记本电脑上大约需要 4 微秒。鉴于绘图的典型费用,无需担心。

于 2010-09-28T12:51:12.393 回答