Trabajar con patrones de sombreado en PostScript | C++

Agregar patrón de sombreado en documento PS

El patrón de sombreado es un patrón de mosaico de textura generalmente representado por una pequeña imagen simple de 2 colores (generalmente blanco y negro). El contenido principal de estas pequeñas imágenes son varios sombreados.

Para pintar por sombreados, la plataforma C++ tiene una clase separada, derivada de System.Drawing.Brush, System.Drawing.HatchBrush. Su diferencia con System.Drawing.TextureBrush es que tiene estilos predefinidos con nombres que definen qué imagen usar para el mosaico. La plataforma C++ ofrece 53 estilos de sombreado y los 52 estilos se pueden usar para rellenar o trazar (delinear) en PsDocument.

Para pintar objetos gráficos con un patrón de sombreado en la biblioteca Aspose.Page para C++, basta simplemente con pasar System.Drawing.HatchBrush 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 de sombreado en la biblioteca Aspose.Page para C++, alguien debe crear un nuevo System.Drawing.Pen con System.Drawing.HacthBrush y pasarlo a SetStroke( ) o uno de los métodos OutlineText() o FillAndStrokeText() que aceptan System.Drawing.Pen como parámetro.

En el siguiente ejemplo, demostramos, en primer lugar, cómo rellenar una forma con un patrón de sombreado, luego toda la variedad de estilos de sombreado en C++ y, finalmente, cómo rellenar y delinear un texto con un patrón de sombreado.

Un algoritmo para pintar objetos gráficos con un patrón de sombreado en un nuevo documento PS incluye los siguientes pasos:

  1. Cree una secuencia de salida para el archivo PS resultante.
  2. Cree PsSaveOptions.
  3. Cree PsDocument con el flujo de salida ya creado y las opciones de guardado.
  4. Cree la ruta gráfica o la fuente necesaria según el objeto que vayamos a rellenar o delinear.
  5. Crea un objeto de System.Drawing.HatchBrush con el estilo deseado.
  6. Configure el pincel de sombreado como pintura actual en PsDocument.
  7. Rellene la ruta de los gráficos con la pintura actual o rellene un texto. Si utilizamos uno de los métodos para rellenar un texto que acepta System.Drawing.Brush como parámetro, se puede ignorar el punto anterior.
  8. Cierra la página.
  9. Guarde el documento.

Si necesitamos trazar (delinear) objetos gráficos con un patrón de sombreado en lugar de los últimos 4 puntos, lo siguiente será:

  1. Cree el objeto System.Drawing.Pen con el pincel de sombreado.

  2. Establezca este lápiz como trazo actual en PsDocument.

  3. Delinee la ruta de los gráficos con el trazo actual o delinee el texto. Si utilizamos uno de los métodos para delinear el texto que acepta System.Drawing.Pen como parámetro, se puede ignorar el punto anterior.

  4. Cierra la página.

  5. Guarde el documento.

 1    // The path to the documents directory.
 2    System::String dataDir = RunExamples::GetDataDir_WorkingWithHatches();
 3    
 4    //Create output stream for PostScript document
 5    {
 6        System::SharedPtr<System::IO::Stream> outPsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"AddHatchPattern_outPS.ps", System::IO::FileMode::Create);
 7        // Clearing resources under 'using' statement
 8        System::Details::DisposeGuard<1> __dispose_guard_0({ 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            int32_t x0 = 20;
20            int32_t y0 = 100;
21            int32_t squareSide = 32;
22            int32_t width = 500;
23            int32_t sumX = 0;
24            
25            //Restore graphics state
26            document->WriteGraphicsSave();
27            
28            //Translate to initial point
29            document->Translate(static_cast<float>(x0), static_cast<float>(y0));
30            
31            //Create rectngle path for every pattern square
32            System::SharedPtr<System::Drawing::Drawing2D::GraphicsPath> path = System::MakeObject<System::Drawing::Drawing2D::GraphicsPath>();
33            path->AddRectangle(System::Drawing::RectangleF(0.0f, 0.0f, static_cast<float>(squareSide), static_cast<float>(squareSide)));
34            
35            //Create pen for outlining pattern square
36            System::SharedPtr<System::Drawing::Pen> pen = System::MakeObject<System::Drawing::Pen>(System::Drawing::Color::get_Black(), 2.0f);
37            
38            //For every hatch pattern style 
39            for (System::Drawing::Drawing2D::HatchStyle hatchStyle = static_cast<System::Drawing::Drawing2D::HatchStyle>(0); hatchStyle <= (System::Drawing::Drawing2D::HatchStyle)52; hatchStyle++)
40            {
41                //Set paint with current hatch brush style
42                document->SetPaint(System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(hatchStyle, System::Drawing::Color::get_Black(), System::Drawing::Color::get_White()));
43                
44                //Calculate displacement in order to don't go beyond the page bounds
45                int32_t x = squareSide;
46                int32_t y = 0;
47                if (sumX >= width)
48                {
49                    x = -(sumX - squareSide);
50                    y += squareSide;
51                }
52                //Translate current graphics state
53                document->Translate(static_cast<float>(x), static_cast<float>(y));
54                //Fill pattern square
55                document->Fill(path);
56                //Set stroke
57                document->SetStroke(pen);
58                //Draw square outline
59                document->Draw(path);
60                
61                //Calculate distance from X0
62                if (sumX >= width)
63                {
64                    sumX = squareSide;
65                }
66                else
67                {
68                    sumX += x;
69                }
70            }
71            
72            //Restore graphics state
73            document->WriteGraphicsRestore();
74            
75            //Fill text with hatch pattern
76            System::SharedPtr<System::Drawing::Drawing2D::HatchBrush> brush = System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(System::Drawing::Drawing2D::HatchStyle::DiagonalCross, System::Drawing::Color::get_Red(), System::Drawing::Color::get_Yellow());
77            System::SharedPtr<System::Drawing::Font> font = System::MakeObject<System::Drawing::Font>(u"Arial", 96.0f, System::Drawing::FontStyle::Bold);
78            document->FillAndStrokeText(u"ABC", font, 200.0f, 300.0f, brush, pen);
79            
80            //Outline text with hatch pattern
81            brush = System::MakeObject<System::Drawing::Drawing2D::HatchBrush>(System::Drawing::Drawing2D::HatchStyle::Percent50, System::Drawing::Color::get_Blue(), System::Drawing::Color::get_White());
82            document->OutlineText(u"ABC", font, 200.0f, 400.0f, System::MakeObject<System::Drawing::Pen>(brush, 5.0f));
83            
84            
85            //Close current page
86            document->ClosePage();
87            
88            //Save the document
89            document->Save();
90        }
91        catch(...)
92        {
93            __dispose_guard_0.SetCurrentException(std::current_exception());
94        }
95    }

Consulte cómo trabajar con un patrón de tramado en un documento PS en Java.


El resultado de ejecutar este código aparece como

Agregar patrón de sombreado

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.