Travailler avec des images dans PostScript | C++
Ajouter une image dans un document PS
La bibliothèque Aspose.Page pour C++ propose deux méthodes pour ajouter des images au document PS :
- pour les images opaques ;
- pour les images transparentes ;
Cela a été créé parce que PostScript ne prend pas en charge la transparence, mais les images translucides peuvent cependant être restituées sous la forme d’un ensemble de pixels entièrement transparents et entièrement opaques. De telles images sont appelées masques. Si nous voulons voir l’image translucide dans le document PS comme un masque, qui reflétera mieux la transparence de l’image, nous devrions effectuer une vérification et un prétraitement d’une telle image.
Le contrôle et le prétraitement nécessitent du temps. Par conséquent, si quelqu’un est sûr que l’image est totalement opaque, il est préférable d’utiliser la première méthode, car elle permet de gagner du temps d’exécution.
La deuxième méthode reconnaît si l’image est totalement opaque ou totalement transparente ou translucide. Si elle est entièrement opaque, elle est ajoutée comme image opaque dans la première méthode, si elle est entièrement transparente, elle n’est pas ajoutée du tout au document, si c’est l’image translucide, elle est ajoutée en tant que masque d’image PostScript.
Dans l’exemple ci-dessous, nous montrons comment ajouter une image entièrement opaque. L’ajout d’une image transparente sera démontré dans l’article « Travailler avec la transparence ».
Afin d’ajouter une image à un nouveau PsDocument avec la bibliothèque Aspose.Page pour C++ dans cet exemple, nous suivons les étapes suivantes :
- 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.
- Créez System.Drawing.Bitmap à partir du fichier image.
- Créez la transformation nécessaire pour l’image.
- Ajoutez l’image à l’objet PsDocument.
- Quittez l’état graphique actuel pour passer au niveau supérieur.
- Fermez la page.
- Enregistrez le document.
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 }
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.