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:

  1. Erstellen Sie einen Ausgabestream für die resultierende PS-Datei.
  2. Erstellen Sie ein PsSaveOptions-Objekt mit Standardoptionen.
  3. Erstellen Sie ein einseitiges PsDocument mit einem bereits erstellten Ausgabestream und Speicheroptionen.
  4. Erstellen Sie einen neuen Grafikstatus und verschieben Sie ihn an die erforderliche Position.
  5. Erstellen Sie System.Drawing.Bitmap aus der Bilddatei.
  6. Erstellen Sie System.Drawing.TextureBrush aus dem Bild.
  7. Stellen Sie die erforderliche Transformation im Texturpinsel ein.
  8. Legen Sie den Texturpinsel als aktuelle Farbe im aktuellen Grafikstatus von PsDocument fest.
  9. Erstellen Sie einen rechteckigen Pfad.
  10. Füllen Sie das Rechteck mit dem Texturpinsel.
  11. Speichern Sie die aktuelle Farbe als lokale Variable für die zukünftige Verwendung.
  12. Stellen Sie den aktuellen Strich mit einem roten Stift ein.
  13. Umreißen Sie das Rechteck mit einem aktuellen Stift.
  14. Verlassen Sie den aktuellen Grafikstatus in den Grafikstatus der oberen Ebene.
  15. Erstellen Sie eine System-Schriftart.
  16. Text füllen und streichen (umreißen). Zum Füllen der Textur wird ein Pinsel und zum Streichen ein schwarzer Stift verwendet.
  17. Umreißen Sie den Text an der anderen Position mit dem neuen System.Drawing.Pen, der mit dem Texturpinsel als Pinsel erstellt wurde.
  18. Schließen Sie die Seite.
  19. 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    }

Siehe Arbeiten mit Texturen in PS-Dokumenten in .NET oder Java.

Das Ergebnis der Ausführung dieses Codes wird wie folgt angezeigt:

Texturkachelmuster hinzufügen

Sie können Beispiele und Datendateien herunterladen von GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.