Управление фонами презентаций в C++

Обзор

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

Фоновый рисунок PowerPoint

Задать сплошной цвет фона для обычного слайда

Aspose.Slides позволяет задать сплошной цвет в качестве фона для конкретного слайда в презентации — даже если презентация использует макетный слайд. Изменение применяется только к выбранному слайду.

  1. Создайте экземпляр класса Presentation.
  2. Задайте свойству слайда BackgroundType значение OwnBackground.
  3. Задайте свойству фона слайда FillType значение Solid.
  4. Вызовите метод get_SolidFillColor у FillFormat и укажите сплошной цвет фона.
  5. Сохраните изменённую презентацию.

Следующий пример на C++ показывает, как задать синий сплошной цвет в качестве фона обычного слайда:

// Создайте экземпляр класса Presentation.
auto presentation = MakeObject<Presentation>();

auto slide = presentation->get_Slide(0);

// Установите цвет фона слайда в синий.
slide->get_Background()->set_Type(BackgroundType::OwnBackground);
slide->get_Background()->get_FillFormat()->set_FillType(FillType::Solid);
slide->get_Background()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Blue());

// Сохраните презентацию на диск.
presentation->Save(u"SolidColorBackground.pptx", SaveFormat::Pptx);
presentation->Dispose();

Задать сплошной цвет фона для макетного слайда

Aspose.Slides позволяет задать сплошной цвет в качестве фона для макетного слайда в презентации. Макетный слайд выступает шаблоном, который управляет форматированием всех слайдов, поэтому при выборе сплошного цвета для фона макетного слайда он применяется к каждому слайду.

  1. Создайте экземпляр класса Presentation.
  2. Задайте свойству макетного слайда BackgroundType (через get_Masters) значение OwnBackground.
  3. Задайте свойству фона макетного слайда FillType значение Solid.
  4. Вызовите метод get_SolidFillColor и укажите сплошной цвет фона.
  5. Сохраните изменённую презентацию.

Следующий пример на C++ показывает, как задать сплошной цвет (лесной зелёный) в качестве фона макетного слайда:

// Создайте экземпляр класса Presentation.
auto presentation = MakeObject<Presentation>();

auto masterSlide = presentation->get_Master(0);

// Установите цвет фона для мастер‑слайда в лесной зелёный.
masterSlide->get_Background()->set_Type(BackgroundType::OwnBackground);
masterSlide->get_Background()->get_FillFormat()->set_FillType(FillType::Solid);
masterSlide->get_Background()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_ForestGreen());

// Сохраните презентацию на диск.
presentation->Save(u"MasterSlideBackground.pptx", SaveFormat::Pptx);
presentation->Dispose();

Задать градиентный фон для слайда

Градиент — это графический эффект, создаваемый постепённым изменением цвета. При использовании в качестве фона слайда градиенты могут сделать презентацию более художественной и профессиональной. Aspose.Slides позволяет задать градиентный цвет в качестве фона для слайдов.

  1. Создайте экземпляр класса Presentation.
  2. Задайте свойству слайда BackgroundType значение OwnBackground.
  3. Задайте свойству фона слайда FillType значение Gradient.
  4. Вызовите метод get_GradientFormat у FillFormat и настройте желаемые параметры градиента.
  5. Сохраните изменённую презентацию.

Следующий пример на C++ показывает, как задать градиентный цвет в качестве фона слайда:

// Создайте экземпляр класса Presentation.
auto presentation = MakeObject<Presentation>();

auto slide = presentation->get_Slide(0);

// Примените градиентный эффект к фону.
slide->get_Background()->set_Type(BackgroundType::OwnBackground);
slide->get_Background()->get_FillFormat()->set_FillType(FillType::Gradient);
slide->get_Background()->get_FillFormat()->get_GradientFormat()->set_TileFlip(TileFlip::FlipBoth);

// Сохраните презентацию на диск.
presentation->Save(u"GradientBackground.pptx", SaveFormat::Pptx);
presentation->Dispose();

Задать изображение в качестве фона слайда

Помимо сплошных и градиентных заливок, Aspose.Slides позволяет использовать изображения в качестве фона слайдов.

  1. Создайте экземпляр класса Presentation.
  2. Задайте свойству слайда BackgroundType значение OwnBackground.
  3. Задайте свойству фона слайда FillType значение Picture.
  4. Загрузите изображение, которое хотите использовать в качестве фона слайда.
  5. Добавьте изображение в коллекцию изображений презентации.
  6. Вызовите метод get_PictureFillFormat у FillFormat и присвойте изображение в качестве фона.
  7. Сохраните изменённую презентацию.

Следующий пример на C++ показывает, как задать изображение в качестве фона слайда:

// Создайте экземпляр класса Presentation.
auto presentation = MakeObject<Presentation>();

auto slide = presentation->get_Slide(0);

// Установите свойства фонового изображения.
slide->get_Background()->set_Type(BackgroundType::OwnBackground);
slide->get_Background()->get_FillFormat()->set_FillType(FillType::Picture);
slide->get_Background()->get_FillFormat()->get_PictureFillFormat()->set_PictureFillMode(PictureFillMode::Stretch);

// Загрузите изображение.
auto image = Images::FromFile(u"Tulips.jpg");
// Добавьте изображение в коллекцию изображений презентации.
auto ppImage = presentation->get_Images()->AddImage(image);
image->Dispose();

slide->get_Background()->get_FillFormat()->get_PictureFillFormat()->get_Picture()->set_Image(ppImage);

// Save the presentation to disk.
presentation->Save(u"ImageAsBackground.pptx", SaveFormat::Pptx);
presentation->Dispose();

Следующий образец кода показывает, как задать тип заливки фона в виде мозаичного изображения и изменить свойства мозаики:

auto presentation = MakeObject<Presentation>();

auto firstSlide = presentation->get_Slide(0);

auto background = firstSlide->get_Background();

background->set_Type(BackgroundType::OwnBackground);
background->get_FillFormat()->set_FillType(FillType::Picture);

auto newImage = Images::FromFile(u"image.png");
auto ppImage = presentation->get_Images()->AddImage(newImage);
newImage->Dispose();

// Set the image used for the background fill.
auto backPictureFillFormat = background->get_FillFormat()->get_PictureFillFormat();
backPictureFillFormat->get_Picture()->set_Image(ppImage);

// Set the picture fill mode to Tile and adjust the tile properties.
backPictureFillFormat->set_PictureFillMode(PictureFillMode::Tile);
backPictureFillFormat->set_TileOffsetX(15.0);
backPictureFillFormat->set_TileOffsetY(15.0);
backPictureFillFormat->set_TileScaleX(46.0);
backPictureFillFormat->set_TileScaleY(87.0);
backPictureFillFormat->set_TileAlignment(RectangleAlignment::Center);
backPictureFillFormat->set_TileFlip(TileFlip::FlipY);

presentation->Save(u"TileBackground.pptx", SaveFormat::Pptx);
presentation->Dispose();

Изменить прозрачность фонового изображения

Возможно, вам понадобится отрегулировать прозрачность фонового изображения слайда, чтобы выделить содержимое слайда. Следующий код на C++ показывает, как изменить прозрачность фонового изображения слайда:

auto transparencyValue = 30; // Например.

// Получить коллекцию операций трансформации изображения.
auto imageTransform = slide->get_Background()->get_FillFormat()->get_PictureFillFormat()->get_Picture()->get_ImageTransform();

// Найти существующий эффект прозрачности с фиксированным процентом.
SharedPtr<IAlphaModulateFixed> transparencyOperation;
for (auto&& operation : imageTransform)
{
    if (ObjectExt::Is<IAlphaModulateFixed>(operation))
    {
        transparencyOperation = ExplicitCast<IAlphaModulateFixed>(operation);
        break;
    }
}

// Установить новое значение прозрачности.
if (transparencyOperation == nullptr)
{
    imageTransform->AddAlphaModulateFixedEffect(100.0f - transparencyValue);
}
else
{
    transparencyOperation->set_Amount(100.0f - transparencyValue);
}

Получить значение фона слайда

Aspose.Slides предоставляет интерфейс IBackgroundEffectiveData для получения эффективных значений фона слайда. Этот интерфейс раскрывает эффективный FillFormat и EffectFormat.

С помощью метода get_Background класса BaseSlide вы можете получить эффективный фон для слайда.

Следующий пример на C++ показывает, как получить эффективное значение фона слайда:

// Создайте экземпляр класса Presentation.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");

auto slide = presentation->get_Slide(0);

// Retrieve the effective background, taking into account master, layout, and theme.
auto effBackground = slide->get_Background()->GetEffective();

if (effBackground->get_FillFormat()->get_FillType() == FillType::Solid)
{
    Console::WriteLine(u"Fill color: {0}", effBackground->get_FillFormat()->get_SolidFillColor());
}
else
{
    Console::WriteLine(u"Fill type: {0}", ObjectExt::ToString(effBackground->get_FillFormat()->get_FillType()));
}

FAQ

Можно ли сбросить пользовательский фон и восстановить фон из темы/макета?

Да. Удалите пользовательскую заливку слайда, и фон будет вновь получен от соответствующего layout/master слайда (то есть от theme background).

Что произойдёт с фоном, если я позже изменю тему презентации?

Если у слайда есть собственная заливка, она останется неизменной. Если фон наследуется от layout/master, он обновится в соответствии с new theme.