Работа с текстурами в 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 в примере:

  1. Создайте выходной поток для полученного PS-файла.
  2. Создайте объект PsSaveOptions с параметрами по умолчанию.
  3. Создайте одностраничный PsDocument с уже созданным потоком вывода и сохраните параметры.
  4. Создайте новое графическое состояние и переведите его в необходимое положение.
  5. Создайте System.Drawing.Bitmap из файла изображения.
  6. Создайте System.Drawing.TextureBrush из изображения.
  7. Установите необходимое преобразование текстурной кисти.
  8. Установите текстурную кисть в качестве текущей краски в текущем графическом состоянии PsDocument.
  9. Создайте прямоугольный путь.
  10. Заполните прямоугольник текстурной кистью.
  11. Сохраните текущую отрисовку как локальную переменную для использования в будущем.
  12. Задайте текущий штрих красной ручкой.
  13. Обведите прямоугольник текущим пером.
  14. Выход из текущего состояния графики в состояние графики верхнего уровня.
  15. Создайте системный шрифт.
  16. Заполните и обведите (обведите) текст. Для заливки текстуры используется кисть, а для обводки — черная ручка.
  17. Обведите текст в другой позиции с помощью нового System.Drawing.Pen, созданного с помощью текстурной кисти в качестве Brush.
  18. Закройте страницу.
  19. Сохраните документ.
 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    }

См. работу с текстурами в документах PS в .NET или Java.

Результат запуска этого кода выглядит так:

Добавить узор текстуры

Вы можете загрузить примеры и файлы данных с сайта GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.