Работа с изображениями в PostScript | С++

Добавить изображение в документ PS

Библиотека Aspose.Page для C++ предлагает два метода добавления изображений в документ PS:

Это было сделано потому, что PostScript не поддерживает прозрачность, однако полупрозрачные изображения можно визуализировать как набор полностью прозрачных и полностью непрозрачных пикселей. Такие изображения называются масками. Если мы хотим видеть полупрозрачное изображение в документе PS как маску, которая будет лучше отражать прозрачность изображения, нам следует выполнить некоторую проверку и предварительную обработку такого изображения.

Проверка и предварительная обработка требуют времени. Поэтому, если кто-то уверен, что изображение полностью непрозрачно, лучше использовать первый метод, поскольку он экономит время выполнения.

Второй метод определяет, является ли изображение полностью непрозрачным, полностью прозрачным или полупрозрачным. Если оно полностью непрозрачно, оно добавляется как непрозрачное изображение в первом методе. если оно полностью прозрачное, оно вообще не добавляется в документ, если это полупрозрачное изображение, оно добавляется как маска изображения PostScript.

В примере ниже мы демонстрируем, как добавить полностью непрозрачное изображение. Добавление прозрачного изображения будет показано в статье «Работа с прозрачностью».

Чтобы добавить изображение в новый PsDocument с помощью библиотеки Aspose.Page для C++ в этом примере, мы выполняем следующие шаги:

  1. Создайте выходной поток для полученного PS-файла.
  2. Создайте объект PsSaveOptions с параметрами по умолчанию.
  3. Создайте одностраничный PsDocument с уже созданным потоком вывода и сохраните параметры.
  4. Создайте новое графическое состояние.
  5. Создайте System.Drawing.Bitmap из файла изображения.
  6. Создайте необходимое преобразование изображения.
  7. Добавьте изображение в объект PsDocument.
  8. Выход из текущего состояния графики на верхний уровень.
  9. Закройте страницу.
  10. Сохраните документ.
 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    }

См. работу с изображениями в документах PS в .NET или Java.

Результат запуска этого кода выглядит так:

Добавить изображение

Вы можете загрузить примеры и файлы данных с сайта GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.