Работа с изображениями в PostScript | С++
Добавить изображение в документ PS
Библиотека Aspose.Page для C++ предлагает два метода добавления изображений в документ PS:
- для непрозрачных изображений;
- для прозрачных изображений;
Это было сделано потому, что PostScript не поддерживает прозрачность, однако полупрозрачные изображения можно визуализировать как набор полностью прозрачных и полностью непрозрачных пикселей. Такие изображения называются масками. Если мы хотим видеть полупрозрачное изображение в документе PS как маску, которая будет лучше отражать прозрачность изображения, нам следует выполнить некоторую проверку и предварительную обработку такого изображения.
Проверка и предварительная обработка требуют времени. Поэтому, если кто-то уверен, что изображение полностью непрозрачно, лучше использовать первый метод, поскольку он экономит время выполнения.
Второй метод определяет, является ли изображение полностью непрозрачным, полностью прозрачным или полупрозрачным. Если оно полностью непрозрачно, оно добавляется как непрозрачное изображение в первом методе. если оно полностью прозрачное, оно вообще не добавляется в документ, если это полупрозрачное изображение, оно добавляется как маска изображения PostScript.
В примере ниже мы демонстрируем, как добавить полностью непрозрачное изображение. Добавление прозрачного изображения будет показано в статье «Работа с прозрачностью».
Чтобы добавить изображение в новый PsDocument с помощью библиотеки Aspose.Page для C++ в этом примере, мы выполняем следующие шаги:
- Создайте выходной поток для полученного PS-файла.
- Создайте объект PsSaveOptions с параметрами по умолчанию.
- Создайте одностраничный PsDocument с уже созданным потоком вывода и сохраните параметры.
- Создайте новое графическое состояние.
- Создайте System.Drawing.Bitmap из файла изображения.
- Создайте необходимое преобразование изображения.
- Добавьте изображение в объект PsDocument.
- Выход из текущего состояния графики на верхний уровень.
- Закройте страницу.
- Сохраните документ.
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 }
Результат запуска этого кода выглядит так:
Вы можете загрузить примеры и файлы данных с сайта GitHub.