ทำงานกับสถานะกราฟิก

คลิปและแปลงสถานะกราฟิกของไฟล์ PS

 

การจัดการสถานะกราฟิกในเอกสาร PS (เทียบเท่ากับผืนผ้าใบใน XPS) เป็นหนึ่งในคุณสมบัติหลักที่นำเสนอโดย Aspose.Page สำหรับ .NET ในตัวอย่างด้านล่างนี้ คุณจะพบวิธีการ:

  • บันทึกสถานะกราฟิกปัจจุบัน สร้างสถานะกราฟิกใหม่และตั้งค่าเป็นปัจจุบัน

  • แปล ปรับขนาด หมุน หรือตัดสถานะกราฟิกปัจจุบัน

  • ตั้งค่าการแปลงที่ซับซ้อนสำหรับสถานะกราฟิกปัจจุบัน

  • ตั้งค่าสีและเส้นโครงร่างสำหรับสถานะกราฟิกปัจจุบัน

  • เติมและวาดเส้นทางกราฟิก

  • คลิปสถานะกราฟิก

  • คืนค่าสถานะกราฟิกก่อนหน้า

หากต้องการแปลงสถานะกราฟิกของไฟล์ PS ให้ทำตามคำแนะนำถัดไป:

  1. สร้างไฟล์ PS โดยใช้ PsDocument Class
  2. สร้างเส้นทางกราฟิกสี่เหลี่ยม
  3. บันทึกสถานะกราฟิกปัจจุบัน สร้างสถานะกราฟิกใหม่และตั้งค่าเป็นปัจจุบันด้วย WriteGraphicsSave() วิธี.
  4. แปลสถานะกราฟิกปัจจุบันโดยใช้เมธอด Translate()
  5. ตั้งค่าสีในสถานะกราฟิกปัจจุบันด้วยวิธี SetPaint()
  6. กรอกเส้นทางกราฟิกโดยใช้เมธอด Fill()
  7. คืนค่าสถานะกราฟิกก่อนหน้าด้วยเมธอด WriteGraphicsRestore
  8. ทำซ้ำขั้นตอนที่ 3-7 เพื่อเพิ่มสถานะกราฟิกด้วยการแปลงอื่นๆ โดยใช้ Scale() , หมุน() , เฉือน() และ Transform() วิธีการ
  9. ปิดเพจปัจจุบันโดยใช้เมธอด ClosePage()
  10. บันทึกเอกสาร PS ที่สร้างขึ้นโดยใช้วิธี PsDocument.Save()

สถานะกราฟิกไฟล์ 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. สร้างไฟล์ PS โดยใช้ PsDocument Class
  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. บันทึกเอกสาร PS ที่สร้างขึ้นโดยใช้วิธี PsDocument.Save()

สถานะกราฟิกไฟล์ 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 ได้อย่างไร

ซึ่งสามารถทำได้โดยใช้คำสั่ง PostScript เช่น gsave และ grestore เพื่อบันทึกและกู้คืนสถานะกราฟิกตามลำดับ นอกจากนี้ ตัวดำเนินการ เช่น setlinewidth, setrgbcolor และ setdash สามารถใช้เพื่อแก้ไขคุณลักษณะเฉพาะของสถานะกราฟิกได้ตามต้องการ

3. เหตุใดการทำความเข้าใจและจัดการสถานะกราฟิกในเอกสาร PostScript (PS) จึงเป็นสิ่งสำคัญ

ด้วยการจัดการสถานะกราฟิก คุณสามารถสร้างเอฟเฟ็กต์ต่างๆ เช่น การแปลง การเปลี่ยนสี และการตัดขอบ ทำให้มั่นใจได้ว่ากราฟิกของคุณจะแสดงอย่างถูกต้องและเป็นไปตามข้อกำหนดการออกแบบของคุณ นอกจากนี้ยังช่วยเพิ่มประสิทธิภาพขนาดไฟล์และประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับองค์ประกอบกราฟิกที่ซับซ้อนหรือซ้ำๆ

PS PS รูปแบบไฟล์คืออะไร

รูปแบบ PS เป็นหนึ่งในรูปแบบภาษาคำอธิบายหน้า (PDL) สามารถใส่ข้อมูลกราฟิกและข้อความบนหน้าได้ นั่นคือเหตุผลที่รูปแบบได้รับการสนับสนุนโดยโปรแกรมส่วนใหญ่สำหรับการแก้ไขภาพ ไฟล์ postscript เป็นคำสั่งชนิดหนึ่งสำหรับเครื่องพิมพ์ มันมีข้อมูลเกี่ยวกับสิ่งที่และวิธีการพิมพ์จากหน้า