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