Trabalhar com estados gráficos

Recorte e transforme estados gráficos de arquivos PS

 

Gerenciar estados gráficos em documentos PS (equivalente a telas em XPS) é um dos principais recursos oferecidos pelo Aspose.Page for .NET. No exemplo abaixo você descobrirá como:

  • Salve o estado gráfico atual, crie um novo estado gráfico e defina-o como atual.

  • Converta, dimensione, gire ou distorça o estado gráfico atual.

  • Defina uma transformação complexa para o estado gráfico atual.

  • Defina pintura e traçado para o estado gráfico atual.

  • Preencha e desenhe um caminho gráfico.

  • Recorte o estado dos gráficos.

  • Restaure o estado gráfico anterior.

Para transformar os estados gráficos de um arquivo PS siga o próximo guia:

  1. Crie um arquivo PS usando a classe PsDocument .
  2. Crie um caminho gráfico retangular.
  3. Salve o estado gráfico atual, crie um novo estado gráfico e defina-o como atual com o WriteGraphicsSave() Método.
  4. Traduza o estado gráfico atual usando o método Translate() .
  5. Defina a pintura no estado gráfico atual com o método SetPaint() .
  6. Preencha o caminho gráfico por meio do método Fill() .
  7. Restaure o estado gráfico anterior com o método WriteGraphicsRestore .
  8. Repita as etapas 3 a 7 para adicionar mais estados gráficos com outras transformações usando Scale() , Rotate() , Shear() e Transform() Métodos.
  9. Feche a página atual por meio do método ClosePage() .
  10. Salve o documento PS criado usando o método PsDocument.Save() .

Estado gráfico do arquivo PS Código C# de transformação

    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 adicionar Clip ao estado gráfico de um arquivo PS, siga o próximo guia:

  1. Crie um arquivo PS usando a classe PsDocument .
  2. Crie um caminho gráfico retangular.
  3. Salve o estado gráfico atual, crie um novo estado gráfico e defina-o como atual com o WriteGraphicsSave() Método.
  4. Traduza o estado gráfico atual usando o método Translate() .
  5. Crie um caminho gráfico circular.
  6. Adicione recorte por círculo ao estado gráfico atual usando o método Clip() .
  7. Defina a pintura no estado gráfico atual com o método SetPaint() .
  8. Preencha o caminho gráfico do retângulo por meio do método Fill() .
  9. Restaure o estado gráfico anterior com o método WriteGraphicsRestore() .
  10. Traduza o estado gráfico atual usando o método Translate() .
  11. Crie um objeto System.Drawing.Pen.
  12. Defina um traço no estado gráfico atual com o método SetStroke() .
  13. Desenhe o caminho gráfico do retângulo acima do retângulo recortado por meio do método Draw() .
  14. Feche a página atual por meio do método ClosePage() .
  15. Salve o documento PS criado usando o método PsDocument.Save() .

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



Perguntas frequentes

1. O que são estados gráficos em documentos PostScript (PS)?

Os estados gráficos em PostScript são as configurações e atributos atuais aplicados aos elementos gráficos no documento. Eles incluem parâmetros como matriz de transformação atual, estilo de linha, cor de preenchimento, caminho de recorte e outros atributos gráficos que afetam como os elementos são renderizados na página.

2. Como posso gerenciar estados gráficos em documentos PS?

Isso pode ser feito usando comandos PostScript como gsave e grestore para salvar e restaurar o estado dos gráficos, respectivamente. Além disso, operadores como setlinewidth, setrgbcolor e setdash podem ser usados ​​para modificar atributos específicos do estado gráfico conforme necessário.

3. Por que é importante compreender e gerenciar estados gráficos em documentos PostScript (PS)?

Ao manipular os estados dos gráficos, você pode obter efeitos como transformações, alterações de cores e regiões de recorte, garantindo que seus gráficos sejam exibidos corretamente e de acordo com as especificações do seu design. Também ajuda a otimizar o tamanho e o desempenho do arquivo, principalmente ao lidar com elementos gráficos complexos ou repetitivos.

PS O que é PS Formato de Arquivo

O formato PS é um dos formatos de linguagem de descrição de página (PDL). É capaz de conter informações gráficas e de texto na página. É por isso que o formato era suportado pela maioria dos programas de edição de imagens. O próprio arquivo postscript é um tipo de instrução para impressoras. Ele contém informações sobre o que e como imprimir a partir de sua página.