Trabalhar com Imagens em PostScript | C++
Adicionar Imagem em Documento PS
A biblioteca Aspose.Page para C++ oferece dois métodos para adicionar imagens a um documento PS:
- para imagens opacas;
- para imagens transparentes;
Isto foi feito porque o PostScript não suporta transparência, mas as imagens translúcidas podem ser renderizadas como um conjunto de pixels totalmente transparentes e totalmente opacos. Estas imagens são chamadas de máscaras. Se quisermos ver a imagem translúcida no documento PS como máscara, que refletirá melhor a transparência da imagem, devemos realizar alguma verificação e pré-processamento dessa imagem.
A verificação e o pré-processamento demoram tempo. Portanto, se alguém tiver a certeza de que a imagem é totalmente opaca, é melhor utilizar o primeiro método, pois poupa tempo de execução.
O segundo método reconhece se a imagem é totalmente opaca, totalmente transparente ou translúcida. Se for totalmente opaca, será adicionada como a imagem opaca no primeiro método; se for totalmente transparente, não será adicionada ao documento; se for a imagem translúcida, será adicionada como uma máscara de imagem PostScript.
No exemplo abaixo, demonstramos como adicionar uma imagem totalmente opaca. A adição de uma imagem transparente será demonstrada no artigo “Trabalhar com Transparência”.
Para adicionar uma imagem a um novo PsDocument com a biblioteca Aspose.Page para C++, neste exemplo, seguimos os seguintes passos:
- Crie um fluxo de saída para o ficheiro PS resultante.
- Crie o objeto PsSaveOptions com as opções padrão.
- Crie um PsDocument de 1 página com um fluxo de saída já criado e guarde as opções.
- Crie um novo estado gráfico.
- Crie System.Drawing.Bitmap a partir do ficheiro de imagem.
- Crie a transformação necessária para a imagem.
- Adicione a imagem ao objeto PsDocument.
- Saia do estado gráfico atual para o nível superior.
- Feche a página.
- Guarde o 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 }
O resultado da execução deste código é apresentado como
Pode descarregar exemplos e ficheiros de dados do GitHub.