次の方法で共有


Graphics.Save メソッド

この Graphics オブジェクトの現在の状態を保存し、保存した状態を GraphicsState オブジェクトで識別します。

Public Function Save() As GraphicsState
[C#]
public GraphicsState Save();
[C++]
public: GraphicsState* Save();
[JScript]
public function Save() : GraphicsState;

戻り値

このメソッドは、この Graphics オブジェクトの保存状態を表す GraphicsState オブジェクトを返します。

解説

Graphics オブジェクトの Save メソッドを呼び出すと、 Graphics オブジェクトの状態を保存している情報ブロックがスタックに格納されます。Save メソッドは、その情報ブロックを識別する GraphicsState オブジェクトを返します。識別対象の GraphicsState オブジェクトを Graphics.Restore メソッドに渡すと、その情報ブロックはスタックから削除され、 Graphics オブジェクトを Save メソッド呼び出し時の状態に復元するために使用されます。Save メソッドを呼び出して返された GraphicsState オブジェクトを Restore メソッドに渡すことができるのは、1 回だけです。

Save メソッドの呼び出しは入れ子にできます。つまり Restore メソッドを呼び出す前に Save メソッドを複数回呼び出すことができます。Save メソッドを呼び出すたびに情報ブロックがスタックに格納され、その情報ブロックの GraphicsState オブジェクトを受け取ります。これらのオブジェクトの 1 つを Restore メソッドに渡すと、 Graphics オブジェクトは、その GraphicsState オブジェクトを返した Save メソッドの呼び出し時の状態に戻ります。その Save メソッドの呼び出しによってスタックに置かれた情報ブロックはスタックから削除されます。さらに、Save メソッドの呼び出し後にそのスタックに置かれた情報ブロックもすべて削除されます。

BeginContainer メソッドを呼び出すと、情報ブロックは Save メソッドを呼び出したときと同じスタックに置かれます。 Restore 呼び出しが Save 呼び出しと対になっているのと同様に、 EndContainer メソッド呼び出しは BeginContainer メソッド呼び出しと対になっています。

Restore メソッドを呼び出すと、対応する Save メソッドの呼び出し後に (Save メソッドまたは BeginContainer メソッドによって) スタックに格納されたすべての情報ブロックが、スタックから削除されます。同様に、 EndContainer メソッドを呼び出すと、対応する BeginContainer メソッドの呼び出し後に (Save メソッドまたは BeginContainer メソッドによって) スタックに格納されたすべての情報ブロックが、スタックから削除されます。

使用例

[Visual Basic, C#] 次の例は、Windows フォームでの使用を意図してデザインされており、 Paint イベント ハンドラのパラメータである PaintEventArgs e が必要です。このコードは次のアクションを実行します。

  • ベクタ (100, 0) で Windows フォームのワールド変換を平行移動します。
  • フォームのグラフィックスの状態を保存します。
  • フォームのワールド変換を単位行列 (2 × 2 の単位行列とゼロベクタ平行移動) にリセットし、四角形を赤いソリッド ブラシで塗りつぶします。
  • 平行移動したグラフィックスの状態を復元し、四角形を青いソリッド ブラシで塗りつぶします。

[Visual Basic, C#] 赤で塗りつぶされた平行移動していない四角形がフォームの左側に、青で塗りつぶされた平行移動済みの四角形がフォームの右側に生成されます。

 
Public Sub SaveRestore(e As PaintEventArgs)
' Translate transformation matrix.
e.Graphics.TranslateTransform(100, 0)
' Save translated graphics state.
Dim transState As GraphicsState = e.Graphics.Save()
' Reset transformation matrix to identity and fill rectangle.
e.Graphics.ResetTransform()
e.Graphics.FillRectangle(New SolidBrush(Color.Red), 0, 0, 100, 100)
' Restore graphics state to translated state and fill second
' rectangle.
e.Graphics.Restore(transState)
e.Graphics.FillRectangle(New SolidBrush(Color.Blue), 0, 0, _
100, 100)
End Sub
        
[C#] 
public void SaveRestore(PaintEventArgs e)
{
// Translate transformation matrix.
e.Graphics.TranslateTransform(100, 0);
// Save translated graphics state.
GraphicsState transState = e.Graphics.Save();
// Reset transformation matrix to identity and fill rectangle.
e.Graphics.ResetTransform();
e.Graphics.FillRectangle(new SolidBrush(Color.Red), 0, 0, 100, 100);
// Restore graphics state to translated state and fill second rectangle.
e.Graphics.Restore(transState);
e.Graphics.FillRectangle(new SolidBrush(Color.Blue), 0, 0, 100, 100);
}
        

[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

Graphics クラス | Graphics メンバ | System.Drawing 名前空間