Trabajar con estados de gráficos

Recorte y transforme estados gráficos de archivos PS

 

La gestión de estados de gráficos en documentos PS (equivalentes a lienzos en XPS) es una de las principales características que ofrece Aspose.Page para .NET. En el siguiente ejemplo descubrirá cómo:

  • Guarde el estado de gráficos actual, cree un nuevo estado de gráficos y configúrelo como actual.

  • Traduce, escala, rota o corta el estado actual de los gráficos.

  • Establezca una transformación compleja para el estado actual de los gráficos.

  • Configure la pintura y el trazo para el estado actual de los gráficos.

  • Complete y dibuje una ruta de gráficos.

  • Recorta el estado de los gráficos.

  • Restaura el estado de gráficos anterior.

Para transformar los estados de los gráficos de un archivo PS, siga la siguiente guía:

  1. Cree un archivo PS usando la Clase PsDocument .
  2. Cree una ruta de gráficos rectangular.
  3. Guarde el estado de gráficos actual, cree un nuevo estado de gráficos y configúrelo como actual con WriteGraphicsSave() Método.
  4. Traduzca el estado actual de los gráficos utilizando el método Translate() .
  5. Establezca la pintura en el estado de gráficos actual con el método SetPaint() .
  6. Rellene la ruta de los gráficos mediante el método Fill() .
  7. Restaure el estado de los gráficos anteriores con el método WriteGraphicsRestore .
  8. Repita los pasos del 3 al 7 para agregar más estados de gráficos con otras transformaciones usando Scale() , Rotar() , Corte() y Transform() Métodos.
  9. Cierre la página actual mediante el método ClosePage() .
  10. Guarde el documento PS creado utilizando el método PsDocument.Save() .

Estado de gráficos de archivos PS Transformación de código 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();
    }

Para agregar Clip al estado de gráficos de un archivo PS, siga la siguiente guía:

  1. Cree un archivo PS usando la Clase PsDocument .
  2. Cree una ruta de gráficos rectangular.
  3. Guarde el estado de gráficos actual, cree un nuevo estado de gráficos y configúrelo como actual con WriteGraphicsSave() Método.
  4. Traduzca el estado actual de los gráficos utilizando el método Translate() .
  5. Cree una ruta de gráficos circulares.
  6. Agregue recorte por círculo al estado actual de los gráficos usando el método Clip() .
  7. Establezca la pintura en el estado de gráficos actual con el método SetPaint() .
  8. Complete la ruta de los gráficos del rectángulo mediante el método Fill() .
  9. Restaure el estado de gráficos anterior con el método WriteGraphicsRestore() .
  10. Traduzca el estado actual de los gráficos utilizando el método Translate() .
  11. Cree un objeto System.Drawing.Pen.
  12. Establezca un trazo en el estado actual de los gráficos con el método SetStroke() .
  13. Dibuje la ruta de los gráficos del rectángulo sobre el rectángulo recortado mediante el método Draw() .
  14. Cierre la página actual mediante el método ClosePage() .
  15. Guarde el documento PS creado utilizando el método PsDocument.Save() .

Código C# de recorte de estado de gráficos de archivos 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();
    }



Preguntas más frecuentes

1. ¿Qué son los estados gráficos en documentos PostScript (PS)?

Los estados de gráficos en PostScript son las configuraciones y atributos actuales aplicados a los elementos gráficos dentro del documento. Incluyen parámetros como la matriz de transformación actual, el estilo de línea, el color de relleno, el trazado de recorte y otros atributos gráficos que afectan la forma en que se representan los elementos en la página.

2. ¿Cómo puedo gestionar los estados de los gráficos en documentos PS?

Esto se puede hacer usando comandos PostScript como gsave y grestore para guardar y restaurar el estado de los gráficos, respectivamente. Además, se pueden utilizar operadores como setlinewidth, setrgbcolor y setdash para modificar atributos específicos del estado de los gráficos según sea necesario.

3. ¿Por qué es importante comprender y gestionar los estados de los gráficos en documentos PostScript (PS)?

Al manipular los estados de los gráficos, puede lograr efectos como transformaciones, cambios de color y regiones de recorte, asegurando que sus gráficos se muestren correctamente y de acuerdo con sus especificaciones de diseño. También ayuda a optimizar el tamaño y el rendimiento del archivo, especialmente cuando se trata de elementos gráficos complejos o repetitivos.

PS Qué es PS Formato de archivo

El formato PS es uno de los formatos de lenguaje de descripción de página (PDL). Es capaz de contener información gráfica y de texto en la página. Es por eso que el formato fue soportado por la mayoría de los programas de edición de imágenes. El archivo postscript en sí mismo es una especie de instrucción para las impresoras. Contiene información sobre qué y cómo imprimir desde su página.