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:
- 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 y transfiéralo a la posición necesaria.
- Cree System.Drawing.Bitmap a partir del archivo de imagen.
- Cree System.Drawing.TextureBrush a partir de la imagen.
- Establece la transformación necesaria en el pincel de textura.
- Configure el pincel de textura como pintura actual en el estado gráfico actual de PsDocument.
- Crea un camino rectangular.
- Rellena el rectángulo con el pincel de textura.
- Guarde la pintura actual como una variable local para uso futuro.
- Establezca el trazo actual con un bolígrafo rojo.
- Delinea el rectángulo con un bolígrafo actual.
- Salga del estado de gráficos actual al estado de gráficos de nivel superior.
- Cree la fuente sistema.
- Rellene y trace (delinee) el texto. Para rellenar se utiliza el pincel de textura y para trazar se utiliza un bolígrafo negro.
- Delinea el texto en la otra posición con el nuevo System.Drawing.Pen creado con el pincel de textura como Pincel.
- Cierra la página.
- 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 }
El resultado de ejecutar este código aparece como
Puede descargar ejemplos y archivos de datos desde GitHub.