グラフィックス状態の操作

PS ファイルのグラフィックス状態をクリップおよび変換する

 

PS ドキュメント (XPS のキャンバスに相当) のグラフィックス状態の管理は、Aspose.Page for .NET が提供する主な機能の 1 つです。以下の例では、次の方法がわかります。

  • 現在のグラフィックス状態を保存し、新しいグラフィックス状態を作成して、それを現在のグラフィックス状態として設定します。

  • 現在のグラフィックス状態を移動、拡大縮小、回転、またはせん断します。

  • 現在のグラフィックス状態に対して複雑な変換を設定します。

  • 現在のグラフィックス状態に合わせてペイントとストロークを設定します。

  • グラフィックパスを塗りつぶして描画します。

  • グラフィックス状態をクリップします。

  • 以前のグラフィックスの状態を復元します。

PS ファイルのグラフィックス状態を変換するには、次のガイドに従ってください。

  1. PsDocument クラス を使用して PS ファイルを作成します。
  2. 長方形のグラフィックス パスを作成します。
  3. 現在のグラフィックス状態を保存し、新しいグラフィックス状態を作成し、 WriteGraphicsSave() で現在のグラフィックス状態として設定します 方法。
  4. Translate() メソッドを使用して現在のグラフィックス状態を変換します。
  5. SetPaint() メソッドを使用して、現在のグラフィックス状態にペイントを設定します。
  6. Fill() メソッドを使用してグラフィックス パスを埋めます。
  7. WriteGraphicsRestore メソッドを使用して、以前のグラフィックス状態を復元します。
  8. Scale() , を使用して、他の変換でグラフィックス状態を追加するには、手順 3 ~ 7 を繰り返します。 Rotate()Shear() および Transform() 方法。
  9. ClosePage() メソッドを使用して、現在のページを閉じます。
  10. PsDocument.Save() メソッドを使用して、作成された PS ドキュメントを保存します。

PS ファイルのグラフィックス状態の変換 C# コード

    using Aspose.Page.EPS;
    using Aspose.Page.EPS.Device;    
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.IO;
    // The path to the documents directory.
    string dataDir = RunExamples.GetDataDir_WorkingWithCanvas();

    //Create output stream for PostScript document
    using (Stream outPsStream = new FileStream(dataDir + "Transformations_outPS.ps", FileMode.Create))
    {
        //Create save options with default values
        PsSaveOptions options = new PsSaveOptions();

        // Create new 1-paged PS Document
        PsDocument document = new PsDocument(outPsStream, options, false);
        
        //Create graphics path from the rectangle
        System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
        path.AddRectangle(new System.Drawing.RectangleF(0, 0, 150, 100));
            
    		///////////////////// Translation //////////////////////////////////////////////////////////////////////

        //Save graphics state in order to return back to this state after transformation
        document.WriteGraphicsSave();

        //Displace current graphics state on 250 to the right. So we add translation component to the current transformation.
        document.Translate(250, 0);

        //Set paint in the current graphics state
        document.SetPaint(new System.Drawing.SolidBrush(Color.Blue));

        //Fill the second rectangle in the current graphics state (has translation transformation)
        document.Fill(path);

        //Restore graphics state to the previus (upper) level
        document.WriteGraphicsRestore();
				/////////////////////////////////////////////////////////////////////////////////////////////////////////


        //Displace on 200 to the bottom.
        document.Translate(0, 200);

				////////////////////// Scaling //////////////////////////////////////////////////////////////////////////
        //Save graphics state in order to return back to this state after transformation
        document.WriteGraphicsSave();

        //Scale current graphics state on 0.5 in X axis and on 0.75f in Y axis. So we add scale component to the current transformation.
        document.Scale(0.5f, 0.75f);

        //Set paint in the current graphics state
        document.SetPaint(new System.Drawing.SolidBrush(Color.Red));

        //Fill the third rectangle in the current graphics state (has scale transformation)
        document.Fill(path);

        //Restore graphics state to the previus (upper) level
        document.WriteGraphicsRestore();
				//////////////////////////////////////////////////////////////////////////////////////////////////////


        //Displace upper level graphics state on 250 to the right.
        document.Translate(250, 0);


				////////////////////// Rotation //////////////////////////////////////////////////////////////////////
        //Save graphics state in order to return back to this state after transformation
        document.WriteGraphicsSave();

        //Rotate current graphics state on 45 degrees around origin of current graphics state (350, 300). So we add rotation component to the current transformation.
        document.Rotate(45);

        //Set paint in the current graphics state
        document.SetPaint(new System.Drawing.SolidBrush(Color.Green));

        //Fill the fourth rectangle in the current graphics state (has rotation transformation)
        document.Fill(path);

        //Restore graphics state to the previus (upper) level
        document.WriteGraphicsRestore();
				//////////////////////////////////////////////////////////////////////////////////////////////////////


        //Returns upper level graphics state back to the left and displace on 200 to the bottom.
        document.Translate(-250, 200);


				////////////////////// Shearing //////////////////////////////////////////////////////////////////////
        //Save graphics state in order to return back to this state after transformation
        document.WriteGraphicsSave();

        //Shear current graphics state. So we add shear component to the current transformation.
        document.Shear(0.1f, 0.2f);

        //Set paint in the current graphics state
        document.SetPaint(new System.Drawing.SolidBrush(Color.Pink));

        //Fill the fifth rectangle in the current graphics state (has shear transformation)
        document.Fill(path);

        //Restore graphics state to the previus (upper) level
        document.WriteGraphicsRestore();
				//////////////////////////////////////////////////////////////////////////////////////////////////////


        //Displace upper level graphics state on 250 to the right.
        document.Translate(250, 0);


				////////////////////// Complex transformation ////////////////////////////////////////////////////////
        //Save graphics state in order to return back to this state after transformation
        document.WriteGraphicsSave();

        //Transform current graphics state with complex transformation. So we add translation, scale and rotation components to the current transformation.
        document.Transform(new System.Drawing.Drawing2D.Matrix(1.2f, -0.965925f, 0.258819f, 1.5f, 0f, 50));

        //Set paint in the current graphics state
        document.SetPaint(new System.Drawing.SolidBrush(Color.Aquamarine));

        //Fill the sixth rectangle in the current graphics state (has complex transformation)
        document.Fill(path);

        //Restore graphics state to the previus (upper) level
        document.WriteGraphicsRestore();
				//////////////////////////////////////////////////////////////////////////////////////////////////////
				
        //Close current page
        document.ClosePage();

        //Save the document
        document.Save();
    }

PS ファイルのグラフィックス状態にクリップを追加するには、次のガイドに従ってください。

  1. PsDocument クラス を使用して PS ファイルを作成します。
  2. 長方形のグラフィックス パスを作成します。
  3. 現在のグラフィックス状態を保存し、新しいグラフィックス状態を作成し、 WriteGraphicsSave() で現在のグラフィックス状態として設定します 方法。
  4. Translate() メソッドを使用して現在のグラフィックス状態を変換します。
  5. 円のグラフィックパスを作成します。
  6. Clip() メソッドを使用して、現在のグラフィックス状態に円によるクリッピングを追加します。
  7. SetPaint() メソッドを使用して、現在のグラフィックス状態にペイントを設定します。
  8. Fill() メソッドを使用して、長方形のグラフィックス パスを塗りつぶします。
  9. WriteGraphicsRestore() メソッドを使用して、以前のグラフィックスの状態を復元します。
  10. Translate() メソッドを使用して現在のグラフィックス状態を変換します。
  11. System.Drawing.Pen オブジェクトを作成します。
  12. SetStroke() メソッドを使用して、現在のグラフィックス状態にストロークを設定します。
  13. Draw() メソッドを使用して、クリップされた四角形の上に四角形のグラフィックス パスを描画します。
  14. ClosePage() メソッドを使用して現在のページを閉じます。
  15. PsDocument.Save() メソッドを使用して、作成した PS ドキュメントを保存します。

PS ファイルのグラフィックス状態クリッピング C# コード

    // The path to the documents directory.
    string dataDir = RunExamples.GetDataDir_WorkingWithCanvas();

    //Create output stream for PostScript document
    using (Stream outPsStream = new FileStream(dataDir + "Clipping_outPS.ps", FileMode.Create))
    {
        //Create save options with default values
        PsSaveOptions options = new PsSaveOptions();

        // Create new 1-paged PS Document
        PsDocument document = new PsDocument(outPsStream, options, false);

        //Create graphics path from the rectangle
        System.Drawing.Drawing2D.GraphicsPath rectangePath = new System.Drawing.Drawing2D.GraphicsPath();
        rectangePath.AddRectangle(new System.Drawing.RectangleF(0, 0, 300, 200));

				////////////////////// Clipping by shape //////////////////////////////////////////////////////////////////////

        //Save graphics state in order to return back to this state after transformation
        document.WriteGraphicsSave();

        //Displace current graphics state on 100 points to the right and 100 points to the bottom.
        document.Translate(100, 100);

        //Create graphics path from the circle
        System.Drawing.Drawing2D.GraphicsPath circlePath = new System.Drawing.Drawing2D.GraphicsPath();
        circlePath.AddEllipse(new System.Drawing.RectangleF(50, 0, 200, 200));

        //Add clipping by circle to the current graphics state
        document.Clip(circlePath);

        //Set paint in the current graphics state
        document.SetPaint(new System.Drawing.SolidBrush(Color.Blue));

        //Fill the rectangle in the current graphics state (with clipping)
        document.Fill(rectangePath);

        //Restore graphics state to the previus (upper) level
        document.WriteGraphicsRestore();

        //Displace upper level graphics state on 100 points to the right and 100 points to the bottom.
        document.Translate(100, 100);

        Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
        pen.DashStyle = DashStyle.Dash;

        document.SetStroke(pen);

        //Draw the rectangle in the current graphics state (has no clipping) above clipped rectngle
        document.Draw(rectangePath);

				/////////////////////////////////////////////////////////////////////////////////////////////////////////

        //Close current page
        document.ClosePage();

        //Save the document
        document.Save();
    }



よくある質問

1. PostScript (PS) ドキュメントのグラフィックス状態とは何ですか?

PostScript のグラフィックス状態は、ドキュメント内のグラフィック要素に適用される現在の設定と属性です。これらには、現在の変換マトリックス、線のスタイル、塗りつぶしの色、クリッピング パス、およびページ上での要素のレンダリング方法に影響を与えるその他のグラフィック属性などのパラメーターが含まれます。

2. PS ドキュメントのグラフィックス状態を管理するにはどうすればよいですか?

これは、gsavegrestoreなどの PostScript コマンドを使用して、それぞれグラフィックス状態を保存および復元することができます。さらに、setlinewidthsetrgbcolorsetdashなどの演算子を使用して、必要に応じてグラフィックス状態の特定の属性を変更できます。

3. PostScript (PS) ドキュメントのグラフィックス状態を理解し、管理することが重要なのはなぜですか?

グラフィックスの状態を操作することで、変換、色の変更、領域のクリッピングなどの効果を実現し、グラフィックスが設計仕様に従って正しく表示されるようにすることができます。また、特に複雑なグラフィック要素や繰り返しのグラフィック要素を扱う場合、ファイル サイズとパフォーマンスの最適化にも役立ちます。

PS PS ファイル形式とは

PS 形式は、ページ記述言語 (PDL) 形式の 1 つです。ページにグラフィック情報とテキスト情報を含めることができます。そのため、ほとんどの画像編集プログラムでこの形式がサポートされていました。 Postscript ファイル自体は、プリンターに対する一種の命令です。そのページから何をどのように印刷するかに関する情報が含まれています。