Работа с текстурами в PostScript | С++
Добавить образец мозаики текстуры в документ PS
Узор текстурного мозаики — это изображение, которое используется для заливки или рисования объектов: фигур или текста. Если размер изображения меньше размера объекта, оно повторяется в направлениях X и Y для покрытия всех необходимых областей.
Процесс повторения изображения внутри графических объектов называется тайлингом. Чтобы установить рисование или обводку в PsDocument, мы должны передать объект класса System.Drawing.Brush для рисования и объект System.Drawing.Pen для обводки в соответствующие методы.
Библиотека Aspose.Page для C++ обрабатывает все подклассы System.Drawing.Brush, предлагаемые платформой C++. Это System.Drawing.SolidBrush, System.Drawing.TextureBrush, System.Drawing.LinearGradientBrush, System.Drawing.PathGradientBrush и *System.Drawing.HatchBrush *. Класс System.Drawing.Pen не может быть расширен, поскольку он запечатан, но он содержит System.Drawing.Brush в качестве свойства и, таким образом, библиотека Aspose.Page для C++ также может использовать полный набор кисти также для рисования линий и обрисовки фигур и текста.
Чтобы рисовать графические объекты с текстурированным узором в библиотеке Aspose.Page для C++, достаточно просто передать System.Drawing.TextureBrush в SetPaint() или один из FillText( ) или FillAndStrokeText(), которые принимают System.Drawing.Brush в качестве параметра.
Чтобы обвести графические объекты текстурированным узором в библиотеке Aspose.Page для C++, вам необходимо создать новый System.Drawing.Pen с помощью System.Drawing.TextureBrush и передать его в SetStroke( ) или один из методов OutlineText() или FillAndStrokeText(), который принимает System.Drawing.Pen в качестве параметра.
В приведенном ниже примере мы демонстрируем, как заполнить фигуру и текст, а также обвести текст узором мозаики текстуры.
Описание шагов работы с Pattern Pattern и PsDocument в примере:
- Создайте выходной поток для полученного PS-файла.
- Создайте объект PsSaveOptions с параметрами по умолчанию.
- Создайте одностраничный PsDocument с уже созданным потоком вывода и сохраните параметры.
- Создайте новое графическое состояние и переведите его в необходимое положение.
- Создайте System.Drawing.Bitmap из файла изображения.
- Создайте System.Drawing.TextureBrush из изображения.
- Установите необходимое преобразование текстурной кисти.
- Установите текстурную кисть в качестве текущей краски в текущем графическом состоянии PsDocument.
- Создайте прямоугольный путь.
- Заполните прямоугольник текстурной кистью.
- Сохраните текущую отрисовку как локальную переменную для использования в будущем.
- Задайте текущий штрих красной ручкой.
- Обведите прямоугольник текущим пером.
- Выход из текущего состояния графики в состояние графики верхнего уровня.
- Создайте системный шрифт.
- Заполните и обведите (обведите) текст. Для заливки текстуры используется кисть, а для обводки — черная ручка.
- Обведите текст в другой позиции с помощью нового System.Drawing.Pen, созданного с помощью текстурной кисти в качестве Brush.
- Закройте страницу.
- Сохраните документ.
1 // The path to the documents directory.
2 System::String dataDir = RunExamples::GetDataDir_WorkingWithTextures();
3
4 //Create output stream for PostScript document
5 {
6 System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"AddTextureTilingPattern_outPS.ps", System::IO::FileMode::Create);
7 // Clearing resources under 'using' statement
8 System::Details::DisposeGuard<1> __dispose_guard_1({ outPsStream});
9 // ------------------------------------------
10
11 try
12 {
13 //Create save options with A4 size
14 System::SharedPtr<PsSaveOptions> options = System::MakeObject<PsSaveOptions>();
15
16 // Create new 1-paged PS Document
17 System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(outPsStream, options, false);
18
19
20 document->WriteGraphicsSave();
21 document->Translate(200.0f, 100.0f);
22
23 //Create a Bitmap object from image file
24 {
25 System::SharedPtr<System::Drawing::Bitmap> image = System::MakeObject<System::Drawing::Bitmap>(dataDir + u"TestTexture.bmp");
26 // Clearing resources under 'using' statement
27 System::Details::DisposeGuard<1> __dispose_guard_0({ image});
28 // ------------------------------------------
29
30 try
31 {
32 //Create texture brush from the image
33 System::SharedPtr<System::Drawing::TextureBrush> brush = System::MakeObject<System::Drawing::TextureBrush>(image, System::Drawing::Drawing2D::WrapMode::Tile);
34
35 //Add scaling in X direction to the mattern
36 System::SharedPtr<System::Drawing::Drawing2D::Matrix> transform = System::MakeObject<System::Drawing::Drawing2D::Matrix>(2.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
37 brush->set_Transform(transform);
38
39 //Set this texture brush as current paint
40 document->SetPaint(brush);
41 }
42 catch(...)
43 {
44 __dispose_guard_0.SetCurrentException(std::current_exception());
45 }
46 }
47
48 //Create rectangle path
49 System::SharedPtr<System::Drawing::Drawing2D::GraphicsPath> path = System::MakeObject<System::Drawing::Drawing2D::GraphicsPath>();
50 path->AddRectangle(System::Drawing::RectangleF(0.0f, 0.0f, 200.0f, 100.0f));
51
52 //Fill rectangle
53 document->Fill(path);
54
55 //Get current paint
56 System::SharedPtr<System::Drawing::Brush> paint = document->GetPaint();
57
58 //Set red stroke
59 document->SetStroke(System::MakeObject<System::Drawing::Pen>(System::MakeObject<System::Drawing::SolidBrush>(System::Drawing::Color::get_Red()), 2.0f));
60 //Stroke the rectangle
61 document->Draw(path);
62
63 document->WriteGraphicsRestore();
64
65 //Fill text with texture pattern
66 System::SharedPtr<System::Drawing::Font> font = System::MakeObject<System::Drawing::Font>(u"Arial", 96.0f, System::Drawing::FontStyle::Bold);
67 document->FillAndStrokeText(u"ABC", font, 200.0f, 300.0f, paint, System::MakeObject<System::Drawing::Pen>(System::Drawing::Color::get_Black(), 2.0f));
68
69 //Outline text with texture pattern
70 document->OutlineText(u"ABC", font, 200.0f, 400.0f, System::MakeObject<System::Drawing::Pen>(paint, 5.0f));
71
72 //Close current page
73 document->ClosePage();
74
75 //Save the document
76 document->Save();
77 }
78 catch(...)
79 {
80 __dispose_guard_1.SetCurrentException(std::current_exception());
81 }
82 }
Результат запуска этого кода выглядит так:
Вы можете загрузить примеры и файлы данных с сайта GitHub.