Создание миниатюр фигур презентации на C++

Введение

Aspose.Slides используется для создания файлов презентаций, где каждая страница — это слайд. Эти слайды можно просматривать, открывая файлы презентаций в Microsoft PowerPoint. Но иногда разработчикам требуется просмотреть изображения фигур отдельно во внешнем просмотрщике изображений. В подобных случаях Aspose.Slides помогает генерировать миниатюрные изображения фигур слайдов. Как использовать эту функцию, описано в данной статье.

Эта статья объясняет, как генерировать миниатюры слайдов различными способами:

  • Создание миниатюры фигуры внутри слайда.
  • Создание миниатюры фигуры для фигуры слайда с пользовательскими размерами.
  • Создание миниатюры фигуры в границах внешнего вида фигуры.

Создание миниатюры фигуры из слайда

Чтобы создать миниатюру фигуры из любого слайда с помощью Aspose.Slides for C++:

  1. Создайте экземпляр класса Presentation .
  2. Получите ссылку на любой слайд, используя его ID или индекс.
  3. Получите изображение миниатюры фигуры указанного слайда в масштабе по умолчанию.
  4. Сохраните изображение миниатюры в любом требуемом формате изображения.

Ниже приведён пример, генерирующий миниатюру фигуры.

auto presentation = MakeObject<Presentation>(u"HelloWorld.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);

auto image = shape->GetImage();
image->Save(u"Shape_thumbnail_out.png", ImageFormat::Png);
image->Dispose();

presentation->Dispose();

Создание миниатюры с пользовательским коэффициентом масштабирования

Чтобы создать миниатюру фигуры любого слайда с помощью Aspose.Slides for C++:

  1. Создайте экземпляр класса Presentation .
  2. Получите ссылку на любой слайд, используя его ID или индекс.
  3. Получите изображение миниатюры указанного слайда с границами фигуры.
  4. Сохраните изображение миниатюры в любом требуемом формате изображения.

Ниже приведён пример, создающий миниатюру с пользовательским коэффициентом масштабирования.

auto bounds = ShapeThumbnailBounds::Shape;
auto scale = 1; // Масштабирование по осям X и Y.

auto presentation = MakeObject<Presentation>(u"HelloWorld.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);

auto image = shape->GetImage(bounds, scale, scale);
image->Save(u"Scaling Factor Thumbnail_out.png", ImageFormat::Png);
image->Dispose();

presentation->Dispose();

Создание миниатюры внешнего вида фигуры на основе границ

Этот метод создания миниатюр фигур позволяет разработчикам генерировать миниатюру в границах внешнего вида фигуры. Он учитывает все эффекты фигуры. Сгенерированная миниатюра фигуры ограничивается границами слайда. Чтобы создать миниатюру любой фигуры слайда в границах её внешнего вида, используйте следующий пример кода:

  1. Создайте экземпляр класса Presentation .
  2. Получите ссылку на любой слайд, используя его ID или индекс.
  3. Получите изображение миниатюры указанного слайда с границами фигуры как внешним видом.
  4. Сохраните изображение миниатюры в любом требуемом формате изображения.

Ниже приведён пример, создающий миниатюру на основе границ внешнего вида фигуры.

auto bounds = ShapeThumbnailBounds::Appearance;
auto scale = 1; // Масштабирование по осям X и Y.

auto presentation = MakeObject<Presentation>(u"HelloWorld.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);

auto image = shape->GetImage(bounds, scale, scale);
image->Save(u"Shape_thumbnail_Bound_Shape_out.png", ImageFormat::Png);
image->Dispose();

presentation->Dispose();

Получение фактических визуальных границ фигуры

Свойства рамки IShapeIShape::get_X(), IShape::get_Y(), IShape::get_Width() и IShape::get_Height() — описывают прямоугольник, хранящийся в модели презентации. Содержимое, фактически отрисованное, может выходить за пределы этой рамки или занимать иной прямоугольник, выровненный по осям. Повороты, контуры, наконечники стрел, разметка и переполнение текста, генерируемая геометрия SmartArt и другие эффекты отрисовки могут изменять занимаемую область.

Используйте Shape::GetVisualBounds для вычисления этой занимаемой области без создания изображения. Метод возвращает объект RectangleF в координатах слайда. Возвращаемый прямоугольник не ограничен границами слайда, поэтому его координаты могут быть отрицательными, если содержимое выходит за начало слайда.

Shape::GetVisualBounds в настоящее время не объявлен в интерфейсе IShape. Поэтому сохраняйте фигуру, полученную из коллекции фигур слайда, как значение интерфейса и приводите тип только при вызове метода.

В следующем примере получаются и сравниваются рамка и визуальные границы:

auto presentation = MakeObject<Presentation>(u"example.pptx");

auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shape(0);

auto visualBounds = System::AsCast<Shape>(shape)->GetVisualBounds();

System::Drawing::RectangleF frameBounds(
    shape->get_X(), shape->get_Y(), shape->get_Width(), shape->get_Height());

Console::WriteLine(u"Frame bounds: {0}", frameBounds);
Console::WriteLine(u"Visual bounds: {0}", visualBounds);

presentation->Dispose();

Тот же объект RectangleF можно использовать для выравнивания соседних фигур по его границе RectangleF::get_Left(), RectangleF::get_Right(), RectangleF::get_Top() или RectangleF::get_Bottom(); зарезервировать достаточно места в сгенерированном макете; либо обнаружить содержимое за пределами разрешённого региона. Визуальные границы особенно полезны для SmartArt, текстовых полей, стрелок, изображений, повернутых фигур и групповых фигур, где сохранённая рамка может не представлять полного отрисованного результата.

Используйте Shape::GetVisualBounds, когда нужны координаты для макета или проверки и не требуется bitmap. Используйте IShape::GetImage, когда необходимо отрисовать фигуру. С помощью ShapeThumbnailBounds параметр ShapeThumbnailBounds::Shape задаёт размер изображения на основе границ фигуры, включая настройки контура, тогда как ShapeThumbnailBounds::Appearance задаёт размер из внешнего вида фигуры и ограничивает результат границами слайда. В отличие от этого, Shape::GetVisualBounds возвращает только вычисленный прямоугольник и не обрезает его по границам слайда.

Часто задаваемые вопросы

Какие форматы изображений можно использовать при сохранении миниатюр фигур?

PNG, JPEG, BMP, GIF, TIFF, и другие. Фигуры также можно экспортировать как векторный SVG, сохраняя содержимое фигуры в формате SVG.

В чем разница между границами Shape и Appearance при рендеринге миниатюры?

Shape использует геометрию фигуры; Appearance учитывает визуальные эффекты (тени, свечения и т.д.).

Что происходит, если фигура помечена как скрытая? Будет ли она всё равно отрисована как миниатюра?

Скрытая фигура остаётся частью модели и может быть отрисована; флаг скрытия влияет на отображение в слайд‑шоу, но не препятствует генерированию изображения фигуры.

Поддерживаются ли групповые фигуры, диаграммы, SmartArt и другие сложные объекты?

Да. Любой объект, представленный как Shape (включая GroupShape, Chart и SmartArt), может быть сохранён как миниатюра или как SVG.

Влияют ли системные шрифты, установленные в системе, на качество миниатюр текстовых фигур?

Да. Вам следует предоставить требуемые шрифты (или настроить замену шрифтов), чтобы избежать нежелательных подстановок и переплавки текста.