Trabajar con imágenes en PostScript | C++
Agregar imagen en documento PS
La biblioteca Aspose.Page para C++ ofrece dos métodos para agregar imágenes a un documento PS:
- para imágenes opacas;
- para imágenes transparentes;
Se creó porque PostScript no admite transparencia, pero las imágenes translúcidas, sin embargo, se pueden representar como un conjunto de píxeles completamente transparentes y completamente opacos. Estas imágenes se denominan máscaras. Si queremos ver la imagen translúcida en el documento PS como máscara, que reflejará mejor la transparencia de la imagen, debemos realizar algunas comprobaciones y preprocesamiento de dicha imagen.
La verificación y el preprocesamiento requieren tiempo. Por tanto, si alguien está seguro de que la imagen es totalmente opaca, es mejor utilizar el primer método, porque ahorra tiempo de ejecución.
El segundo método reconoce si la imagen es completamente opaca o completamente transparente o translúcida. Si es completamente opaco, se agrega como imagen opaca en el primer método. si es completamente transparente, no se agrega al documento en absoluto; si es la imagen translúcida, se agrega como una máscara de imagen PostScript.
En el siguiente ejemplo, demostramos cómo agregar una imagen completamente opaca. La adición de una imagen transparente se demostrará en el artículo “Trabajar con transparencia”.
Para agregar una imagen a un nuevo PsDocument con la biblioteca Aspose.Page para C++ en este ejemplo, seguimos los siguientes pasos:
- Cree una secuencia de salida para el archivo PS resultante.
- Cree el objeto PsSaveOptions con opciones predeterminadas.
- Cree un PsDocument de 1 página con un flujo de salida ya creado y opciones para guardar.
- Cree un nuevo estado de gráficos.
- Cree System.Drawing.Bitmap a partir del archivo de imagen.
- Crea la transformación necesaria para la imagen.
- Agregue la imagen al objeto PsDocument.
- Salga del estado de gráficos actual al nivel uno superior.
- Cierra la página.
- Guarde el documento.
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 }
El resultado de ejecutar este código aparece como
Puede descargar ejemplos y archivos de datos desde GitHub.