Travailler avec des textures dans PostScript | C++
Ajouter un motif de mosaïque de texture dans un document PS
Un motif de mosaïque de texture est une image utilisée pour remplir ou dessiner des objets : des formes ou du texte. Si la taille de l’image est inférieure à la taille de l’objet, elle est répétée dans les directions X et Y pour couvrir toutes les zones nécessaires.
Le processus de répétition de l’image à l’intérieur d’objets graphiques est appelé carrelage. Afin de définir la peinture ou le trait dans PsDocument, nous devons transmettre un objet de la classe System.Drawing.Brush pour une peinture et un objet de System.Drawing.Pen pour le trait dans les méthodes.
La bibliothèque Aspose.Page pour C++ traite toutes les sous-classes de System.Drawing.Brush proposées par la plateforme C++. Il s’agit de System.Drawing.SolidBrush, System.Drawing.TextureBrush, System.Drawing.LinearGradientBrush, System.Drawing.PathGradientBrush et *System.Drawing.HatchBrush. *. La classe System.Drawing.Pen ne peut pas être étendue car elle est scellée, mais elle contient System.Drawing.Brush comme propriété et, par conséquent, la bibliothèque Aspose.Page pour C++ peut également utiliser un ensemble complet de des pinceaux également pour tracer des lignes et décrire des formes et du texte.
Afin de peindre des objets graphiques avec un motif texturé dans la bibliothèque Aspose.Page pour C++, il suffit simplement de passer System.Drawing.TextureBrush à SetPaint() ou à l’un des FillText( ) ou FillAndStrokeText() qui accepte System.Drawing.Brush comme paramètre.
Afin de décrire les objets graphiques avec un motif texturé dans la bibliothèque Aspose.Page pour C++, vous devez créer un nouveau System.Drawing.Pen avec System.Drawing.TextureBrush et le transmettre à SetStroke( ) ou l’une des méthodes OutlineText() ou FillAndStrokeText() qui accepte System.Drawing.Pen comme paramètre.
Dans l’exemple ci-dessous, nous montrons comment remplir une forme et un texte et décrire un texte avec un motif de mosaïque de texture.
Description des étapes de travail avec Texture Pattern et PsDocument dans l’exemple :
- Créez un flux de sortie pour le fichier PS résultant.
- Créez un objet PsSaveOptions avec les options par défaut.
- Créez un PsDocument d’une page avec un flux de sortie déjà créé et enregistrez les options.
- Créez un nouvel état graphique et traduisez-le dans la position nécessaire.
- Créez System.Drawing.Bitmap à partir du fichier image.
- Créez System.Drawing.TextureBrush à partir de l’image.
- Définissez la transformation nécessaire dans le pinceau de texture.
- Définissez le pinceau de texture comme peinture actuelle dans l’état graphique actuel de PsDocument.
- Créez un chemin rectangulaire.
- Remplissez le rectangle avec le pinceau à texture.
- Enregistrez la peinture actuelle en tant que variable locale pour une utilisation future.
- Définissez le trait actuel avec un stylo rouge.
- Décrivez le rectangle avec un stylo courant.
- Quittez l’état graphique actuel et passez à l’état graphique de niveau supérieur.
- Créez une police système.
- Remplissez et contournez le texte (contour). Pour remplir, le pinceau à texture est utilisé et pour caresser, un stylo noir est utilisé.
- Décrivez le texte dans l’autre position avec le nouveau System.Drawing.Pen créé avec le pinceau de texture comme pinceau.
- Fermez la page.
- Enregistrez le document.
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 }
Le résultat de l’exécution de ce code apparaît comme
Vous pouvez télécharger des exemples et des fichiers de données à partir de GitHub.