Trabalhar com Texturas em PostScript | C++

Adicionar Padrão de Textura em Azulejos no Documento PS

Um padrão de textura em azulejos é uma imagem utilizada para preencher ou desenhar objetos: formas ou texto. Se o tamanho da imagem for inferior ao tamanho do objeto, esta será repetida nas direções X e Y para cobrir todas as áreas necessárias.

O processo de repetição da imagem dentro de objetos gráficos é designado por azulejo. Para definir pintura ou traço em PsDocument, devemos passar um objeto da classe System.Drawing.Brush para uma pintura e um objeto da classe System.Drawing.Pen para traçado nos respetivos métodos.

A biblioteca Aspose.Page para C++ processa todas as subclasses de System.Drawing.Brush oferecidas pela plataforma C++. São eles: System.Drawing.SolidBrush, System.Drawing.TextureBrush, System.Drawing.LinearGradientBrush, System.Drawing.PathGradientBrush e System.Drawing.HatchBrush. A classe System.Drawing.Pen não pode ser estendida porque está selada, mas contém System.Drawing.Brush como propriedade e, portanto, a biblioteca Aspose.Page para C++ também pode utilizar um conjunto completo de pincéis para desenhar linhas e contornar formas e texto.

Para pintar objetos gráficos com um padrão texturizado na biblioteca Aspose.Page para C++, basta passar System.Drawing.TextureBrush para SetPaint() ou um dos métodos FillText() ou FillAndStrokeText() que aceitam System.Drawing.Brush como parâmetro.

Para contornar os objetos gráficos com um padrão texturizado na biblioteca Aspose.Page para C++, deve criar um novo System.Drawing.Pen com System.Drawing.TextureBrush e passá-lo para SetStroke() ou um dos métodos OutlineText() ou FillAndStrokeText() que aceitem System.Drawing.Pen como parâmetro.

No exemplo abaixo, demonstramos como preencher uma forma e um texto, e contornar um texto com um padrão de mosaico texturado.

Descrição dos passos de trabalho com o Padrão de Textura e PsDocument no exemplo:

  1. Crie um fluxo de saída para o ficheiro PS resultante.
  2. Crie o objeto PsSaveOptions com as opções padrão.
  3. Crie um PsDocument de 1 página com um fluxo de saída já criado e guarde as opções.
  4. Crie um novo estado gráfico e translade-o para a posição necessária.
  5. Crie System.Drawing.Bitmap a partir do ficheiro de imagem.
  6. Crie System.Drawing.TextureBrush a partir da imagem.
  7. Defina a transformação necessária no pincel de textura.
  8. Defina o pincel de textura como a pintura atual no estado gráfico atual do PsDocument.
  9. Crie um percurso retangular.
  10. Preencha o retângulo com o pincel de textura.
  11. Guarde a pintura atual como uma variável local para utilização futura.
  12. Defina o traço atual com uma caneta vermelha.
  13. Contorne o retângulo com uma caneta atual.
  14. Saia do estado gráfico atual para o estado gráfico de nível superior.
  15. Crie a fonte system.
  16. Preencha e trace (contorne) o texto. Para preencher, utilize o pincel de textura e, para traçar, utilize caneta preta.
  17. Contorne o texto na outra posição com o novo System.Drawing.Pen criado com o pincel de textura como Brush.
  18. Feche a página.
  19. Guarde o 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    }

Veja como trabalhar com texturas em documentos PS em .NET ou Java.

O resultado da execução deste código é apresentado como

Adicionar Padrão de Mosaico de Textura

Pode descarregar exemplos e ficheiros de dados do GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.