Робота з графічними станами в PS

Обрізайте та перетворюйте графічні стани файлів PS за допомогою API для .NET

 

Керування станами графіки в документах 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() .

Код C# відсікання графічного стану файлу PS

    // 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();
    }



FAQ

1. Що таке стани графіки в документах PostScript (PS)?

Стани графіки в PostScript — це поточні налаштування та атрибути, застосовані до графічних елементів у документі. Вони включають такі параметри, як поточна матриця перетворення, стиль лінії, колір заливки, відсічний контур та інші графічні атрибути, які впливають на те, як елементи відображаються на сторінці.

2. Як я можу керувати станом графіки в документах PS?

Це можна зробити за допомогою команд PostScript, таких як gsave і grestore, щоб зберегти та відновити стан графіки відповідно. Крім того, можна використовувати такі оператори, як setlinewidth, setrgbcolor і setdash, для зміни певних атрибутів стану графіки за потреби.

3. Чому важливо розуміти стани графіки в документах PostScript (PS) і керувати ними?

Управляючи станами графіки, ви можете досягати таких ефектів, як перетворення, зміни кольору та відсікання областей, гарантуючи, що ваша графіка відображається правильно та відповідно до специфікацій вашого дизайну. Це також допомагає оптимізувати розмір файлу та продуктивність, особливо при роботі зі складними або повторюваними графічними елементами.

PS What is PS File Format

Формат PS є одним із форматів мови опису сторінок (PDL). Він здатний містити як графічну, так і текстову інформацію на сторінці. Тому формат підтримувався більшістю програм для редагування зображень. Сам файл PostScript є своєрідною інструкцією для друку. Він містить інформацію про те, що і як друкувати зі своєї сторінки.