Робота з шаблонами штрихування в 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 включає такі кроки:
- Створіть вихідний потік для отриманого файлу PS.
- Створіть PsSaveOptions.
- Створіть PsDocument із уже створеним вихідним потоком і параметрами збереження.
- Створіть необхідний графічний шлях або шрифт в залежності від того, який об’єкт ми збираємося заповнити або окреслити.
- Створіть об’єкт System.Drawing.HatchBrush із бажаним стилем.
- Встановіть пензель штрихування як поточну фарбу в PsDocument
- Заповніть графічний контур поточною фарбою або заповніть текст. Якщо ми використовуємо один із методів заповнення тексту, який приймає System.Drawing.Brush як параметр, попередній пункт можна проігнорувати.
- Закрийте сторінку.
- Збережіть документ.
Якщо нам потрібно штрихування (контур) графічних об’єктів із шаблоном штрихування замість останніх 4 пунктів, наступним буде:
Створіть об’єкт System.Drawing.Pen за допомогою пензля штрихування.
Установіть це перо як поточний штрих у PsDocument.
Окресліть контур графіки поточною штрихом або обведіть текст. Якщо ми використовуємо один із методів для контуру тексту, який приймає System.Drawing.Pen як параметр, попередній пункт можна проігнорувати.
Закрийте сторінку.
Збережіть документ.
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.