العمل مع الحالات الرسومية

قص وتحويل الحالات الرسومية لملفات 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() ، Rotate() ، Shear() و 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). إنه قادر على احتواء المعلومات الرسومية والنصية على الصفحة. هذا هو السبب في أن التنسيق كان مدعومًا من قبل معظم برامج تحرير الصور. ملف بوستسكريبت نفسه هو نوع من التعليمات للطابعات. يحتوي على معلومات حول ماذا وكيف تطبع من صفحتها.