Trabajar con texturas en PostScript | C++

Agregar patrón de mosaico de textura en documento PS

Un patrón de mosaico de textura es una imagen que se utiliza para rellenar o dibujar objetos: formas o texto. Si el tamaño de la imagen es menor que el tamaño del objeto, se repite en las direcciones X e Y para cubrir todas las áreas necesarias.

El proceso de repetición de una imagen dentro de objetos gráficos se llama mosaico. Para configurar la pintura o el trazo en PsDocument debemos pasar un objeto de la clase System.Drawing.Brush para una pintura y un objeto de System.Drawing.Pen para los trazos respectivos. métodos.

La biblioteca Aspose.Page para C++ procesa todas las subclases de System.Drawing.Brush que ofrece la plataforma C++. Estos son System.Drawing.SolidBrush, System.Drawing.TextureBrush, System.Drawing.LinearGradientBrush, System.Drawing.PathGradientBrush y *System.Drawing.HatchBrush *. La clase System.Drawing.Pen no se puede ampliar porque está sellada, pero contiene System.Drawing.Brush como propiedad y, por lo tanto, la biblioteca Aspose.Page para C++ también puede usar un conjunto completo de Pinceles también para dibujar líneas y delinear formas y texto.

Para pintar objetos gráficos con un patrón texturizado en la biblioteca Aspose.Page para C++, basta con pasar System.Drawing.TextureBrush a SetPaint() o uno de los FillText( ) o FillAndStrokeText() métodos que aceptan System.Drawing.Brush como parámetro.

Para delinear objetos gráficos con un patrón texturizado en la biblioteca Aspose.Page para C++, debe crear un nuevo System.Drawing.Pen con System.Drawing.TextureBrush y pasarlo a SetStroke( ) o uno de los métodos OutlineText() o FillAndStrokeText() que acepta System.Drawing.Pen como parámetro.

En el siguiente ejemplo, demostramos cómo rellenar una forma y un texto y delinear un texto con un patrón de mosaico de textura.

Descripción de los pasos para trabajar con Patrón de textura y PsDocument en el ejemplo:

  1. Cree una secuencia de salida para el archivo PS resultante.
  2. Cree el objeto PsSaveOptions con opciones predeterminadas.
  3. Cree un PsDocument de 1 página con un flujo de salida ya creado y opciones para guardar.
  4. Cree un nuevo estado de gráficos y transfiéralo a la posición necesaria.
  5. Cree System.Drawing.Bitmap a partir del archivo de imagen.
  6. Cree System.Drawing.TextureBrush a partir de la imagen.
  7. Establece la transformación necesaria en el pincel de textura.
  8. Configure el pincel de textura como pintura actual en el estado gráfico actual de PsDocument.
  9. Crea un camino rectangular.
  10. Rellena el rectángulo con el pincel de textura.
  11. Guarde la pintura actual como una variable local para uso futuro.
  12. Establezca el trazo actual con un bolígrafo rojo.
  13. Delinea el rectángulo con un bolígrafo actual.
  14. Salga del estado de gráficos actual al estado de gráficos de nivel superior.
  15. Cree la fuente sistema.
  16. Rellene y trace (delinee) el texto. Para rellenar se utiliza el pincel de textura y para trazar se utiliza un bolígrafo negro.
  17. Delinea el texto en la otra posición con el nuevo System.Drawing.Pen creado con el pincel de textura como Pincel.
  18. Cierra la página.
  19. Guarde el documento.
 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    }

Vea cómo trabajar con texturas en documentos PS en .NET o Java.

El resultado de ejecutar este código aparece como

Agregar patrón de mosaico de textura

Puede descargar ejemplos y archivos de datos desde GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.