Работа с графическими состояниями
Вырезайте и преобразуйте графические состояния файлов PS.
Управление состояниями графики в документах PS (эквивалент холстов в XPS) — одна из основных функций, предлагаемых Aspose.Page для .NET. В примере ниже вы узнаете, как:
Сохраните текущее состояние графики, создайте новое состояние графики и установите его как текущее.
Перемещайте, масштабируйте, вращайте или сдвигайте текущее состояние графики.
Установите сложное преобразование для текущего состояния графики.
Установите краску и обводку для текущего состояния графики.
Заполните и нарисуйте графический путь.
Закрепите состояние графики.
Восстановите предыдущее состояние графики.
Чтобы преобразовать графические состояния файла PS, следуйте следующему руководству:
- Создайте файл PS, используя PsDocument Class .
- Создайте прямоугольный графический путь.
- Сохраните текущее состояние графики, создайте новое состояние графики и установите его как текущее с помощью WriteGraphicsSave() Метод.
- Переведите текущее состояние графики с помощью метода Translate() .
- Установите отрисовку в текущее состояние графики с помощью метода SetPaint() .
- Заполните графический путь с помощью метода Fill() .
- Восстановите предыдущее состояние графики с помощью метода WriteGraphicsRestore .
- Повторите шаги 3–7, чтобы добавить дополнительные графические состояния с помощью других преобразований, используя Scale() , Rotate() , Shear() и Transform() Методы.
- Закройте текущую страницу с помощью метода ClosePage() .
- Сохраните созданный документ 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, следуйте следующему руководству:
- Создайте файл PS, используя PsDocument Class .
- Создайте прямоугольный графический путь.
- Сохраните текущее состояние графики, создайте новое состояние графики и установите его как текущее с помощью WriteGraphicsSave() Метод.
- Переведите текущее состояние графики с помощью метода Translate() .
- Создайте круговой графический путь.
- Добавьте обрезку по кругу к текущему состоянию графики, используя метод Clip() .
- Установите отрисовку в текущее состояние графики с помощью метода SetPaint() .
- Заполните графический путь прямоугольника с помощью метода Fill() .
- Восстановите предыдущее состояние графики с помощью метода WriteGraphicsRestore() .
- Переведите текущее состояние графики с помощью метода Translate() .
- Создайте объект System.Drawing.Pen.
- Установите обводку в текущем состоянии графики с помощью метода SetStroke() .
- Нарисуйте графический путь прямоугольника над обрезанным прямоугольником с помощью метода Draw() .
- Закройте текущую страницу с помощью метода ClosePage() .
- Сохраните созданный документ 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). Он способен содержать как графическую, так и текстовую информацию на странице. Именно поэтому формат поддерживался большинством программ для редактирования изображений. Сам файл postscript является своеобразной инструкцией для принтеров. Он содержит информацию о том, что и как печатать со своей страницы.