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:
- Crie um arquivo PS usando a classe PsDocument .
- Crie um caminho gráfico retangular.
- Salve o estado gráfico atual, crie um novo estado gráfico e defina-o como atual com o WriteGraphicsSave() Método.
- Traduza o estado gráfico atual usando o método Translate() .
- Defina a pintura no estado gráfico atual com o método SetPaint() .
- Preencha o caminho gráfico por meio do método Fill() .
- Restaure o estado gráfico anterior com o método WriteGraphicsRestore .
- Repita as etapas 3 a 7 para adicionar mais estados gráficos com outras transformações usando Scale() , Rotate() , Shear() e Transform() Métodos.
- Feche a página atual por meio do método ClosePage() .
- 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:
- Crie um arquivo PS usando a classe PsDocument .
- Crie um caminho gráfico retangular.
- Salve o estado gráfico atual, crie um novo estado gráfico e defina-o como atual com o WriteGraphicsSave() Método.
- Traduza o estado gráfico atual usando o método Translate() .
- Crie um caminho gráfico circular.
- Adicione recorte por círculo ao estado gráfico atual usando o método Clip() .
- Defina a pintura no estado gráfico atual com o método SetPaint() .
- Preencha o caminho gráfico do retângulo por meio do método Fill() .
- Restaure o estado gráfico anterior com o método WriteGraphicsRestore() .
- Traduza o estado gráfico atual usando o método Translate() .
- Crie um objeto System.Drawing.Pen.
- Defina um traço no estado gráfico atual com o método SetStroke() .
- Desenhe o caminho gráfico do retângulo acima do retângulo recortado por meio do método Draw() .
- Feche a página atual por meio do método ClosePage() .
- 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.