Arbeiten mit Bildern in PostScript | C++
Bild im PS-Dokument hinzufügen
Die Aspose.Page for C++-Bibliothek bietet zwei Methoden zum Hinzufügen von Bildern zu PS-Dokumenten:
- für undurchsichtige Bilder;
- für transparente Bilder;
Es wurde erstellt, weil PostScript keine Transparenz unterstützt, durchscheinende Bilder jedoch als eine Reihe vollständig transparenter und vollständig undurchsichtiger Pixel gerendert werden können. Solche Bilder werden Masken genannt. Wenn wir das durchscheinende Bild im PS-Dokument als Maske sehen möchten, damit die Transparenz des Bildes besser wiedergegeben wird, sollten wir ein solches Bild überprüfen und vorverarbeiten.
Die Prüfung und die Vorverarbeitung benötigen Zeit. Wenn jemand sicher ist, dass das Bild vollständig undurchsichtig ist, ist es daher besser, die erste Methode zu verwenden, da dadurch Ausführungszeit gespart wird.
Die zweite Methode erkennt, ob das Bild vollständig undurchsichtig oder vollständig transparent bzw. durchscheinend ist. Wenn es vollständig undurchsichtig ist, wird es in der ersten Methode als undurchsichtiges Bild hinzugefügt. Wenn es vollständig transparent ist, wird es dem Dokument überhaupt nicht hinzugefügt. Wenn es sich um ein durchscheinendes Bild handelt, wird es als PostScript-Bild-Maske hinzugefügt.
Im folgenden Beispiel zeigen wir, wie man ein vollständig undurchsichtiges Bild hinzufügt. Das Hinzufügen eines transparenten Bildes wird im Artikel „Arbeiten mit Transparenz“ demonstriert.
Um in diesem Beispiel ein Bild zu einem neuen PsDocument mit der Aspose.Page für C++-Bibliothek hinzuzufügen, führen wir die folgenden Schritte aus:
- 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.
- Erstellen Sie System.Drawing.Bitmap aus der Bilddatei.
- Erstellen Sie die erforderliche Transformation für das Bild.
- Fügen Sie das Bild zum PsDocument-Objekt hinzu.
- Verlassen Sie den aktuellen Grafikstatus zur oberen Ebene eins.
- Schließen Sie die Seite.
- Speichern Sie das Dokument.
1 // The path to the documents directory.
2 System::String dataDir = RunExamples::GetDataDir_WorkingWithImages();
3
4 //Create output stream for PostScript document
5 {
6 System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"AddImage_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(100.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"TestImage Format24bppRgb.jpg");
26 // Clearing resources under 'using' statement
27 System::Details::DisposeGuard<1> __dispose_guard_0({ image});
28 // ------------------------------------------
29
30 try
31 {
32 //Create image transform
33 System::SharedPtr<System::Drawing::Drawing2D::Matrix> transform = System::MakeObject<System::Drawing::Drawing2D::Matrix>();
34 transform->Translate(35.0f, 300.0f);
35 transform->Scale(3.0f, 3.0f);
36 transform->Rotate(-45.0f);
37
38 //Add image to document
39 document->DrawImage(image, transform, System::Drawing::Color::Empty);
40 }
41 catch(...)
42 {
43 __dispose_guard_0.SetCurrentException(std::current_exception());
44 }
45 }
46
47 document->WriteGraphicsRestore();
48
49 //Close current page
50 document->ClosePage();
51
52 //Save the document
53 document->Save();
54 }
55 catch(...)
56 {
57 __dispose_guard_1.SetCurrentException(std::current_exception());
58 }
59 }
Das Ergebnis der Ausführung dieses Codes wird wie folgt angezeigt:
Sie können Beispiele und Datendateien herunterladen von GitHub.