ทำงานกับสถานะกราฟิก
คลิปและแปลงสถานะกราฟิกของไฟล์ PS
การจัดการสถานะกราฟิกในเอกสาร PS (เทียบเท่ากับผืนผ้าใบใน XPS) เป็นหนึ่งในคุณสมบัติหลักที่นำเสนอโดย Aspose.Page สำหรับ .NET ในตัวอย่างด้านล่างนี้ คุณจะพบวิธีการ:
บันทึกสถานะกราฟิกปัจจุบัน สร้างสถานะกราฟิกใหม่และตั้งค่าเป็นปัจจุบัน
แปล ปรับขนาด หมุน หรือตัดสถานะกราฟิกปัจจุบัน
ตั้งค่าการแปลงที่ซับซ้อนสำหรับสถานะกราฟิกปัจจุบัน
ตั้งค่าสีและเส้นโครงร่างสำหรับสถานะกราฟิกปัจจุบัน
เติมและวาดเส้นทางกราฟิก
คลิปสถานะกราฟิก
คืนค่าสถานะกราฟิกก่อนหน้า
หากต้องการแปลงสถานะกราฟิกของไฟล์ PS ให้ทำตามคำแนะนำถัดไป:
- สร้างไฟล์ PS โดยใช้ PsDocument Class
- สร้างเส้นทางกราฟิกสี่เหลี่ยม
- บันทึกสถานะกราฟิกปัจจุบัน สร้างสถานะกราฟิกใหม่และตั้งค่าเป็นปัจจุบันด้วย WriteGraphicsSave() วิธี.
- แปลสถานะกราฟิกปัจจุบันโดยใช้เมธอด Translate()
- ตั้งค่าสีในสถานะกราฟิกปัจจุบันด้วยวิธี SetPaint()
- กรอกเส้นทางกราฟิกโดยใช้เมธอด Fill()
- คืนค่าสถานะกราฟิกก่อนหน้าด้วยเมธอด WriteGraphicsRestore
- ทำซ้ำขั้นตอนที่ 3-7 เพื่อเพิ่มสถานะกราฟิกด้วยการแปลงอื่นๆ โดยใช้ Scale() , หมุน() , เฉือน() และ Transform() วิธีการ
- ปิดเพจปัจจุบันโดยใช้เมธอด ClosePage()
- บันทึกเอกสาร 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 ให้ทำตามคำแนะนำถัดไป:
- สร้างไฟล์ PS โดยใช้ PsDocument Class
- สร้างเส้นทางกราฟิกสี่เหลี่ยม
- บันทึกสถานะกราฟิกปัจจุบัน สร้างสถานะกราฟิกใหม่และตั้งค่าเป็นปัจจุบันด้วย WriteGraphicsSave() วิธี.
- แปลสถานะกราฟิกปัจจุบันโดยใช้เมธอด Translate()
- สร้างเส้นทางกราฟิกวงกลม
- เพิ่มการคลิปเป็นวงกลมให้กับสถานะกราฟิกปัจจุบันโดยใช้เมธอด Clip()
- ตั้งค่าสีในสถานะกราฟิกปัจจุบันด้วยวิธี SetPaint()
- เติมเส้นทางกราฟิกสี่เหลี่ยมโดยใช้วิธี Fill()
- คืนค่าสถานะกราฟิกก่อนหน้าด้วยเมธอด WriteGraphicsRestore()
- แปลสถานะกราฟิกปัจจุบันโดยใช้เมธอด Translate()
- สร้างวัตถุ System. Drawing.Pen
- ตั้งค่าจังหวะในสถานะกราฟิกปัจจุบันด้วยวิธี SetStroke()
- วาดเส้นทางกราฟิกสี่เหลี่ยมเหนือสี่เหลี่ยมที่ถูกตัดโดยใช้วิธี Draw()
- ปิดเพจปัจจุบันโดยใช้เมธอด ClosePage()
- บันทึกเอกสาร 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 เป็นคำสั่งชนิดหนึ่งสำหรับเครื่องพิมพ์ มันมีข้อมูลเกี่ยวกับสิ่งที่และวิธีการพิมพ์จากหน้า