Arbeiten mit Texturen in PostScript | C++
Fügen Sie im PS-Dokument ein Texturkachelmuster hinzu
Ein Texturkachelmuster ist ein Bild, das zum Füllen oder Zeichnen von Objekten verwendet wird: Formen oder Text. Wenn die Größe des Bildes kleiner als die Größe des Objekts ist, wird es in X- und Y-Richtung wiederholt, um alle erforderlichen Bereiche abzudecken.
Der Vorgang der Wiederholung des Bildes innerhalb von Grafikobjekten wird als Kacheln bezeichnet. Um Farbe oder Strich in PsDocument festzulegen, müssen wir ein Objekt der Klasse System.Drawing.Brush für ein Gemälde und ein Objekt der Klasse System.Drawing.Pen für den Strich übergeben Methoden.
Die Bibliothek Aspose.Page für C++ verarbeitet alle Unterklassen von System.Drawing.Brush, die von der C++-Plattform angeboten werden. Dies sind System.Drawing.SolidBrush, System.Drawing.TextureBrush, System.Drawing.LinearGradientBrush, System.Drawing.PathGradientBrush und *System.Drawing.HatchBrush *. Die Klasse System.Drawing.Pen kann nicht erweitert werden, da sie versiegelt ist, aber sie enthält System.Drawing.Brush als Eigenschaft und daher kann die Bibliothek Aspose.Page für C++ auch einen vollständigen Satz von verwenden Pinsel auch zum Zeichnen von Linien und zum Umreißen von Formen und Text.
Um Grafikobjekte mit einem strukturierten Muster in der Aspose.Page für C++-Bibliothek zu malen, reicht es aus, einfach System.Drawing.TextureBrush an SetPaint() oder einen der FillText( ) oder FillAndStrokeText()-Methoden, die System.Drawing.Brush als Parameter akzeptieren.
Um Grafikobjekte mit einem strukturierten Muster in der Aspose.Page für C++-Bibliothek zu umreißen, sollten Sie einen neuen System.Drawing.Pen mit System.Drawing.TextureBrush erstellen und ihn an SetStroke( ) oder eine der Methoden OutlineText() oder FillAndStrokeText(), die System.Drawing.Pen als Parameter akzeptiert.
Im folgenden Beispiel zeigen wir, wie Sie eine Form und einen Text füllen und einen Text mit einem Texturkachelmuster umreißen.
Beschreibung der Arbeitsschritte mit Texture Pattern und PsDocument im Beispiel:
- Erstellen Sie einen Ausgabestream für die resultierende PS-Datei.
- Erstellen Sie ein PsSaveOptions-Objekt mit Standardoptionen.
- Erstellen Sie ein einseitiges PsDocument mit einem bereits erstellten Ausgabestream und Speicheroptionen.
- Erstellen Sie einen neuen Grafikstatus und verschieben Sie ihn an die erforderliche Position.
- Erstellen Sie System.Drawing.Bitmap aus der Bilddatei.
- Erstellen Sie System.Drawing.TextureBrush aus dem Bild.
- Stellen Sie die erforderliche Transformation im Texturpinsel ein.
- Legen Sie den Texturpinsel als aktuelle Farbe im aktuellen Grafikstatus von PsDocument fest.
- Erstellen Sie einen rechteckigen Pfad.
- Füllen Sie das Rechteck mit dem Texturpinsel.
- Speichern Sie die aktuelle Farbe als lokale Variable für die zukünftige Verwendung.
- Stellen Sie den aktuellen Strich mit einem roten Stift ein.
- Umreißen Sie das Rechteck mit einem aktuellen Stift.
- Verlassen Sie den aktuellen Grafikstatus in den Grafikstatus der oberen Ebene.
- Erstellen Sie eine System-Schriftart.
- Text füllen und streichen (umreißen). Zum Füllen der Textur wird ein Pinsel und zum Streichen ein schwarzer Stift verwendet.
- Umreißen Sie den Text an der anderen Position mit dem neuen System.Drawing.Pen, der mit dem Texturpinsel als Pinsel erstellt wurde.
- Schließen Sie die Seite.
- Speichern Sie das Dokument.
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 }
Das Ergebnis der Ausführung dieses Codes wird wie folgt angezeigt:
Sie können Beispiele und Datendateien herunterladen von GitHub.