代码之家  ›  专栏  ›  技术社区  ›  Agnel Kurian

graphics.save与graphics.begincontainer

  •  7
  • Agnel Kurian  · 技术社区  · 15 年前

    如何 Graphics.Save 不同于 Graphics.BeginContainer ?

    3 回复  |  直到 10 年前
        1
  •  4
  •   serhio    15 年前

    看一看 here :

    文件没有 区分呼叫 开始容器/结束容器和调用 到graphics.save和graphicsRestore。 此外,在 文件。例如 graphicsState被错误地断言 由BeginContainer使用]

    在我的使用中,BeginContainer/EndContainer似乎 保存并还原当前 变换。它实际上并没有保存 剪切区域作为 文档断言,它可能不会 在中保存任何其他属性 图形对象。

    通过保存/还原,我实际上能够保存/还原剪辑 区域、当前转换和其他 设置。如果不是的话 完整,比 容器函数。因此,我 怀疑性能/完整性 两者之间的权衡 方法。

    我也怀疑文件是否正确说明 图形状态对象(由 save)按原样存储在堆栈中 GraphicContainer对象(由 开始保持)。我怀疑 甚至不能放置GraphicsState 在堆栈上,但我没有测试过这个 假设。

        2
  •  1
  •   Nick Tomlin    10 年前

    也许我可以从一些msdn的例子中给出解释。我的msdn版本是Visual Studio 2008 SP1。在msdn的编辑中输入关键字“嵌套图形容器”可以找到这些示例。

    其解释如下:

    如前两个示例所示,转换和剪切区域在嵌套容器中是累积的。如果设置容器和图形对象的世界转换,这两个转换都将应用于从容器内部绘制的项。首先应用容器的转换,其次应用图形对象的转换。如果设置容器和图形对象的剪切区域,则从容器内部绘制的项将被两个剪切区域的交集剪切。

    从上面复制的内容来看,关键词是“累积”和“交叉”。因此,我认为这是理解BeginContainer函数的一种方法。

    Full MSDN article available here.

        3
  •  0
  •   serhio    15 年前

    图形.保存方法 保存此图形的当前状态,并用图形状态标识保存的状态。

    graphics.begincontainer方法 使用此图形对象的当前状态保存图形容器,然后打开并使用新的图形容器。

    评论

    呼唤 开始容器 方法将信息块与对 保存 方法。就像恢复调用与 保存 调用,A 终端容器 方法调用与 开始容器 方法调用。

    当你打电话给 恢复 方法,堆栈上放置的所有信息块(通过save方法或 开始容器 方法)从堆栈中移除对save方法的相应调用之后。同样,当你打电话给 终端容器 方法,堆栈上放置的所有信息块 保存 方法或 开始容器 方法)在对 开始容器 方法从堆栈中移除。

    详见 http://msdn.microsoft.com/en-us/library/system.drawing.graphics.save.aspx