Робота з шаблонами штрихування в PostScript | C++

Додайте шаблон штрихування в документ PS

Візерунок штрихування — це текстурний мозаїчний візерунок, зазвичай представлений маленьким двокольоровим (зазвичай чорно-білим) простим зображенням. Основним змістом цих невеликих зображень є різні штрихування.

Для малювання штрихуванням платформа C++ має окремий клас, похідний від System.Drawing.Brush, System.Drawing.HatchBrush. Його відмінність від System.Drawing.TextureBrush полягає в тому, що він має попередньо визначені стилі, які визначають, яке зображення використовувати для мозаїки. Платформа C++ пропонує 53 стилі штрихування, і всі 52 стилі можна використовувати для заливки або обведення (контуру) у PsDocument.

Щоб намалювати графічні об’єкти шаблоном штрихування в бібліотеці Aspose.Page для C++, достатньо просто передати System.Drawing.HatchBrush у SetPaint() або один із FillText( ) або FillAndStrokeText() методи, які приймають System.Drawing.Brush як параметр.

Щоб контурувати графічні об’єкти шаблоном штрихування в Aspose.Page для бібліотеки C++, хтось повинен створити новий System.Drawing.Pen за допомогою System.Drawing.HacthBrush і передати його в SetStroke( ) або один із методів OutlineText() або FillAndStrokeText(), які приймають System.Drawing.Pen як параметр.

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

Алгоритм розмальовування графічних об’єктів шаблоном штрихування в новому документі PS включає такі кроки:

  1. Створіть вихідний потік для отриманого файлу PS.
  2. Створіть PsSaveOptions.
  3. Створіть PsDocument із уже створеним вихідним потоком і параметрами збереження.
  4. Створіть необхідний графічний шлях або шрифт в залежності від того, який об’єкт ми збираємося заповнити або окреслити.
  5. Створіть об’єкт System.Drawing.HatchBrush із бажаним стилем.
  6. Встановіть пензель штрихування як поточну фарбу в PsDocument
  7. Заповніть графічний контур поточною фарбою або заповніть текст. Якщо ми використовуємо один із методів заповнення тексту, який приймає System.Drawing.Brush як параметр, попередній пункт можна проігнорувати.
  8. Закрийте сторінку.
  9. Збережіть документ.

Якщо нам потрібно штрихування (контур) графічних об’єктів із шаблоном штрихування замість останніх 4 пунктів, наступним буде:

  1. Створіть об’єкт System.Drawing.Pen за допомогою пензля штрихування.

  2. Установіть це перо як поточний штрих у PsDocument.

  3. Окресліть контур графіки поточною штрихом або обведіть текст. Якщо ми використовуємо один із методів для контуру тексту, який приймає System.Drawing.Pen як параметр, попередній пункт можна проігнорувати.

  4. Закрийте сторінку.

  5. Збережіть документ.

 1    // The path to the documents directory.
 2    System::String dataDir = RunExamples::GetDataDir_WorkingWithHatches();
 3    
 4    //Create output stream for PostScript document
 5    {
 6        System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"AddHatchPattern_outPS.ps", System::IO::FileMode::Create);
 7        // Clearing resources under 'using' statement
 8        System::Details::DisposeGuard<1> __dispose_guard_0({ 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            int32_t x0 = 20;
20            int32_t y0 = 100;
21            int32_t squareSide = 32;
22            int32_t width = 500;
23            int32_t sumX = 0;
24            
25            //Restore graphics state
26            document->WriteGraphicsSave();
27            
28            //Translate to initial point
29            document->Translate(static_cast<float>(x0), static_cast<float>(y0));
30            
31            //Create rectngle path for every pattern square
32            System::SharedPtr<System::Drawing::Drawing2D::GraphicsPath> path = System::MakeObject<System::Drawing::Drawing2D::GraphicsPath>();
33            path->AddRectangle(System::Drawing::RectangleF(0.0f, 0.0f, static_cast<float>(squareSide), static_cast<float>(squareSide)));
34            
35            //Create pen for outlining pattern square
36            System::SharedPtr<System::Drawing::Pen> pen = System::MakeObject<System::Drawing::Pen>(System::Drawing::Color::get_Black(), 2.0f);
37            
38            //For every hatch pattern style 
39            for (System::Drawing::Drawing2D::HatchStyle hatchStyle = static_cast<System::Drawing::Drawing2D::HatchStyle>(0); hatchStyle <= (System::Drawing::Drawing2D::HatchStyle)52; hatchStyle++)
40            {
41                //Set paint with current hatch brush style
42                document->SetPaint(System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(hatchStyle, System::Drawing::Color::get_Black(), System::Drawing::Color::get_White()));
43                
44                //Calculate displacement in order to don't go beyond the page bounds
45                int32_t x = squareSide;
46                int32_t y = 0;
47                if (sumX >= width)
48                {
49                    x = -(sumX - squareSide);
50                    y += squareSide;
51                }
52                //Translate current graphics state
53                document->Translate(static_cast<float>(x), static_cast<float>(y));
54                //Fill pattern square
55                document->Fill(path);
56                //Set stroke
57                document->SetStroke(pen);
58                //Draw square outline
59                document->Draw(path);
60                
61                //Calculate distance from X0
62                if (sumX >= width)
63                {
64                    sumX = squareSide;
65                }
66                else
67                {
68                    sumX += x;
69                }
70            }
71            
72            //Restore graphics state
73            document->WriteGraphicsRestore();
74            
75            //Fill text with hatch pattern
76            System::SharedPtr<System::Drawing::Drawing2D::HatchBrush> brush = System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(System::Drawing::Drawing2D::HatchStyle::DiagonalCross, System::Drawing::Color::get_Red(), System::Drawing::Color::get_Yellow());
77            System::SharedPtr<System::Drawing::Font> font = System::MakeObject<System::Drawing::Font>(u"Arial", 96.0f, System::Drawing::FontStyle::Bold);
78            document->FillAndStrokeText(u"ABC", font, 200.0f, 300.0f, brush, pen);
79            
80            //Outline text with hatch pattern
81            brush = System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(System::Drawing::Drawing2D::HatchStyle::Percent50, System::Drawing::Color::get_Blue(), System::Drawing::Color::get_White());
82            document->OutlineText(u"ABC", font, 200.0f, 400.0f, System::MakeObject<System::Drawing::Pen>(brush, 5.0f));
83            
84            
85            //Close current page
86            document->ClosePage();
87            
88            //Save the document
89            document->Save();
90        }
91        catch(...)
92        {
93            __dispose_guard_0.SetCurrentException(std::current_exception());
94        }
95    }

Дивіться роботу з шаблоном штрихування в документі PS у Java.


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

Додати шаблон штрихування

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

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.