Робота з текстурами в PostScript | C++

Додайте шаблон розбиття текстури в документ 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 як параметр.

У наведеному нижче прикладі ми демонструємо, як заповнити фігуру та текст, а також окреслити текст шаблоном плитки текстури.

Опис кроків роботи з Texture Pattern і PsDocument у прикладі:

  1. Створіть вихідний потік для отриманого файлу PS.
  2. Створіть об’єкт PsSaveOptions із параметрами за замовчуванням.
  3. Створіть 1-сторінковий 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](/page/{{lang.url- фрагмент}}java/ps/working-with-textures/).

Результат виконання цього коду виглядає як

Додати шаблон плитки текстури

Ви можете завантажити приклади та файли даних із GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.