Použít animace tvarů v prezentacích pomocí C++
Úvod
Animace jsou vizuální efekty, které lze použít na texty, obrázky, tvary nebo grafy. Dodávají život prezentacím nebo jejich částem.
Proč používat animace v prezentacích?
Používáním animací můžete
- ovládat tok informací
- zdůraznit důležité body
- zvýšit zájem či zapojení publika
- usnadnit čtení, vstřebání nebo zpracování obsahu
- upoutat pozornost čtenářů nebo diváků na důležité části v prezentaci
PowerPoint poskytuje mnoho možností a nástrojů pro animace a animační efekty v kategoriích vstup, odchod, zdůraznění a cesty pohybu.
Animace v Aspose.Slides
- Aspose.Slides poskytuje třídy a typy, které potřebujete pro práci s animacemi v namespace Aspose.Slides.Animation,
- Aspose.Slides poskytuje více než 150 animačních efektů v enumeraci EffectType. Tyto efekty jsou v podstatě stejné (nebo ekvivalentní) efekty používané v PowerPointu.
Použít animaci na TextBox
Aspose.Slides pro C++ vám umožňuje použít animaci na text ve tvaru.
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Přidejte
rectangleIAutoShape. - Přidejte text do IAutoShape.TextFrame.
- Získejte hlavní sekvenci efektů.
- Přidejte animační efekt do IAutoShape.
- Nastavte vlastnost TextAnimation.BuildType na hodnotu z BuildType Enumeration.
- Uložte prezentaci na disk ve formátu PPTX.
Tento C++ kód ukazuje, jak použít efekt Fade na AutoShape a nastavit animaci textu na hodnotu By 1st Level Paragraphs:
// Vytvoří instanci třídy prezentace, která představuje soubor prezentace.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
System::SharedPtr<ISlide> sld = pres->get_Slides()->idx_get(0);
// Přidá nový AutoShape s textem
System::SharedPtr<IAutoShape> autoShape =
sld->get_Shapes()->AddAutoShape(Aspose::Slides::ShapeType::Rectangle, 20.0f, 20.0f, 150.0f, 100.0f);
System::SharedPtr<ITextFrame> textFrame = autoShape->get_TextFrame();
textFrame->set_Text(u"First paragraph \nSecond paragraph \n Third paragraph");
// Získá hlavní sekvenci snímku.
System::SharedPtr<ISequence> sequence = sld->get_Timeline()->get_MainSequence();
// Přidá efekt animace Fade do tvaru
System::SharedPtr<IEffect> effect = sequence->AddEffect(autoShape, Aspose::Slides::Animation::EffectType::Fade,
Aspose::Slides::Animation::EffectSubtype::None, Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Animuje text tvaru podle odstavců první úrovně
effect->get_TextAnimation()->set_BuildType(Aspose::Slides::Animation::BuildType::ByLevelParagraphs1);
// Uloží soubor PPTX na disk
pres->Save(path + u"AnimText_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Použít animaci na PictureFrame
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Přidejte nebo získejte PictureFrame na snímku.
- Získejte hlavní sekvenci efektů.
- Přidejte animační efekt do PictureFrame.
- Uložte prezentaci na disk ve formátu PPTX.
// Vytvoří instanci třídy prezentace, která představuje soubor prezentace.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
// Načte obrázek, který má být přidán do kolekce obrázků prezentace
System::SharedPtr<IImage> img = Images::FromFile(u"aspose-logo.jpg");
System::SharedPtr<IPPImage> image = pres->get_Images()->AddImage(img);
// Přidá rámeček obrázku na snímek
System::SharedPtr<IPictureFrame> picFrame =
pres->get_Slides()->idx_get(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 50.0f, 50.0f, 100.0f, 100.0f, image);
// Získá hlavní sekvenci snímku.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();
// Přidá animační efekt Fly zleva k rámečku obrázku
System::SharedPtr<IEffect> effect = sequence->AddEffect(picFrame, Aspose::Slides::Animation::EffectType::Fly,
Aspose::Slides::Animation::EffectSubtype::Left, Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Uloží soubor PPTX na disk
pres->Save(path + u"AnimImage_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Použít animaci na tvar
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Přidejte
rectangleIAutoShape. - Přidejte
BevelIAutoShape (když je tento objekt kliknut, animace se spustí). - Vytvořte sekvenci efektů na tvaru bevel.
- Vytvořte vlastní
UserPath. - Přidejte příkazy pro přesun na
UserPath. - Uložte prezentaci na disk ve formátu PPTX.
// Cesta k adresáři dokumentů.
const String outPath = u"../out/AnimationsOnShapes_out.pptx";
const String templatePath = u"../templates/ConnectorLineAngle.pptx";
// Načte prezentaci
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// Přistupuje k prvnímu snímku
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
// Přistupuje ke kolekci tvarů pro vybraný snímek
SharedPtr<IShapeCollection> shapes = slide->get_Shapes();
// Vytvoří efekt PathFootball pro existující tvar od začátku.
SharedPtr<IAutoShape> ashp = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
ashp->AddTextFrame(u"Animated TextBox");
// Přidá animační efekt PathFootball
slide->get_Timeline()->get_MainSequence()->AddEffect(ashp, EffectType::PathFootball,
EffectSubtype::None, EffectTriggerType::AfterPrevious);
// Vytvoří nějaký druh "tlačítka".
SharedPtr<IAutoShape> shapeTrigger = slide->get_Shapes()->AddAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
// Vytvoří sekvenci efektů pro toto tlačítko.
SharedPtr<ISequence> seqInter = slide->get_Timeline()->get_InteractiveSequences()->Add(shapeTrigger);
// Vytvoří vlastní uživatelskou cestu. Náš objekt bude přesunut až po kliknutí na tlačítko.
SharedPtr<IEffect> fxUserPath = seqInter->AddEffect(ashp, EffectType::PathUser, EffectSubtype::None, EffectTriggerType::OnClick);
// Přidá příkazy pro pohyb, protože vytvořená cesta je prázdná.
SharedPtr<MotionEffect> motionBhv = ExplicitCast<MotionEffect>(fxUserPath->get_Behaviors()->idx_get(0));
// SharedPtr<PointF> point = MakeObject<PointF >(0.076, 0.59);
const PointF point = PointF (0.076, 0.59);
System::ArrayPtr<PointF> pts = System::MakeObject<System::Array<PointF>>(1, point);
motionBhv->get_Path()->Add(MotionCommandPathType::LineTo, pts, MotionPathPointsType::Auto, true);
//PointF point2[1] = { -0.076, -0.59 };
const PointF point2 = PointF(-0.076, -0.59 );
System::ArrayPtr<PointF> pts2 = System::MakeObject<System::Array<PointF>>(1, point2);
motionBhv->get_Path()->Add(MotionCommandPathType::LineTo, pts2, MotionPathPointsType::Auto, false);
motionBhv->get_Path()->Add(MotionCommandPathType::End, nullptr, MotionPathPointsType::Auto, false);
//Zapíše soubor PPTX na disk
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
Získat animační efekty aplikované na tvar
Níže uvedené příklady ukazují, jak použít metodu GetEffectsByShape z rozhraní ISequence k získání všech animačních efektů aplikovaných na tvar.
Příklad 1: Získat animační efekty aplikované na tvar na běžném snímku
Dříve jste se naučili, jak přidávat animační efekty do tvarů v prezentacích PowerPoint. Následující ukázkový kód ukazuje, jak získat efekty aplikované na první tvar na prvním běžném snímku v prezentaci AnimExample_out.pptx.
SharedPtr<Presentation> presentation = MakeObject<Presentation>(u"AnimExample_out.pptx");
SharedPtr<ISlide> firstSlide = presentation->get_Slide(0);
// Gets the main animation sequence of the slide.
SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();
// Gets the first shape on the first slide.
SharedPtr<IShape> shape = firstSlide->get_Shape(0);
// Gets animation effects applied to the shape.
ArrayPtr<SharedPtr<IEffect>> shapeEffects = sequence->GetEffectsByShape(shape);
if (shapeEffects->get_Length() > 0)
{
Console::WriteLine(u"The shape " + shape->get_Name() + u" has " + shapeEffects->get_Length() + u" animation effects.");
}
presentation->Dispose();
Příklad 2: Získat všechny animační efekty, včetně těch zděděných z placeholderů
Pokud má tvar na běžném snímku placeholdery, které jsou na snímku rozvržení a/nebo hlavním snímku, a na tyto placeholdery byly přidány animační efekty, pak budou během prezentace přehrány všechny efekty tvaru, včetně těch zděděných z placeholderů.
Řekněme, že máme soubor prezentace PowerPoint sample.pptx s jedním snímkem obsahujícím pouze tvar zápatí s textem “Made with Aspose.Slides” a na tento tvar je aplikován efekt Random Bars.

Předpokládejme také, že efekt Split je aplikován na placeholder zápatí na snímku layout.

A nakonec je na placeholder zápatí na snímku master aplikován efekt Fly In.

Následující ukázkový kód ukazuje, jak použít metodu GetBasePlaceholder z rozhraní IShape k přístupu k placeholderům tvaru a získání animačních efektů aplikovaných na tvar zápatí, včetně těch zděděných z placeholderů umístěných na snímcích layout a master.
void PrintEffects(ArrayPtr<SharedPtr<IEffect>> effects)
{
for (SharedPtr<IEffect> effect : effects)
{
Console::WriteLine(String::Format(u"Type: {0}, subtype: {1}", effect->get_Type(), effect->get_Subtype()));
}
}
SharedPtr<Presentation> presentation = MakeObject<Presentation>(u"sample.pptx");
SharedPtr<ISlide> slide = presentation->get_Slide(0);
// Get animation effects of the shape on the normal slide.
SharedPtr<IShape> shape = slide->get_Shape(0);
ArrayPtr<SharedPtr<IEffect>> shapeEffects = slide->get_Timeline()->get_MainSequence()->GetEffectsByShape(shape);
// Get animation effects of the placeholder on the layout slide.
SharedPtr<IShape> layoutShape = shape->GetBasePlaceholder();
ArrayPtr<SharedPtr<IEffect>> layoutShapeEffects = slide->get_LayoutSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(layoutShape);
// Get animation effects of the placeholder on the master slide.
SharedPtr<IShape> masterShape = layoutShape->GetBasePlaceholder();
ArrayPtr<SharedPtr<IEffect>> masterShapeEffects = slide->get_LayoutSlide()->get_MasterSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(masterShape);
presentation->Dispose();
Console::WriteLine(u"Main sequence of shape effects:");
PrintEffects(masterShapeEffects);
PrintEffects(layoutShapeEffects);
PrintEffects(shapeEffects);
Main sequence of shape effects:
Type: 47, subtype: 2 // Prolet, Dole
Type: 134, subtype: 45 // Rozdělení, Svisle dovnitř
Type: 126, subtype: 22 // Náhodné pruhy, Horizontální
Změnit časové vlastnosti animačního efektu
Aspose.Slides pro C++ vám umožňuje změnit časové vlastnosti animačního efektu.
This is the Animation Timing pane in Microsoft PowerPoint:

Jedná se o odpovídající položky mezi časováním v PowerPointu a vlastnostmi Effect.Timing :
- Rozbalovací seznam Start v časování PowerPointu odpovídá vlastnosti Effect.Timing.TriggerType.
- Duration v časování PowerPointu odpovídá vlastnosti Effect.Timing.Duration. Délka animace (v sekundách) je celková doba, kterou animace potřebuje k dokončení jednoho cyklu.
- Delay v časování PowerPointu odpovídá vlastnosti Effect.Timing.TriggerDelayTime.
Takto změníte vlastnosti časování efektu:
- Použít nebo získat animační efekt.
- Nastavte nové hodnoty požadovaných vlastností Effect.Timing.
- Uložte upravený soubor PPTX.
// Vytvoří instanci třídy prezentace, která představuje soubor prezentace.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");
// Získá hlavní sekvenci snímku.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();
// Získá první efekt hlavní sekvence.
System::SharedPtr<IEffect> effect = sequence->idx_get(0);
// Změní TriggerType efektu tak, aby se spustil kliknutím
effect->get_Timing()->set_TriggerType(Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Změní délku trvání efektu
effect->get_Timing()->set_Duration(3.f);
// Změní TriggerDelayTime efektu
effect->get_Timing()->set_TriggerDelayTime(0.5f);
// Uloží soubor PPTX na disk
pres->Save(u"AnimExample_changed.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Zvuk animačního efektu
Aspose.Slides poskytuje následující vlastnosti, které umožňují práci se zvuky v animačních efektech:
Přidat zvuk animačního efektu
Tento C++ kód ukazuje, jak přidat zvuk animačního efektu a zastavit jej, když začne další efekt:
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");
// Přidá zvuk do kolekce audio souborů prezentace
System::SharedPtr<IAudio> effectSound = pres->get_Audios()->AddAudio(System::IO::File::ReadAllBytes(u"sampleaudio.wav"));
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Získá hlavní sekvenci snímku.
System::SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();
// Získá první efekt hlavní sekvence
System::SharedPtr<IEffect> firstEffect = sequence->idx_get(0);
// Kontroluje, zda efekt nemá žádný zvuk
if (!firstEffect->get_StopPreviousSound() && firstEffect->get_Sound() == nullptr)
{
// Přidá zvuk k prvnímu efektu
firstEffect->set_Sound(effectSound);
}
// Získá první interaktivní sekvenci snímku.
System::SharedPtr<ISequence> interactiveSequence = firstSlide->get_Timeline()->get_InteractiveSequence(0);
// Nastaví příznak efektu "Stop previous sound"
interactiveSequence->idx_get(0)->set_StopPreviousSound(true);
// Zapíše soubor PPTX na disk
pres->Save(u"AnimExample_Sound_out.pptx", SaveFormat::Pptx);
Extrahovat zvuk animačního efektu
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Získejte hlavní sekvenci efektů.
- Extrahujte vložený set_Sound() z každého animačního efektu.
Tento C++ kód ukazuje, jak extrahovat zvuk vložený do animačního efektu:
// Vytvoří instanci třídy prezentace, která představuje soubor prezentace.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"EffectSound.pptx");
System::SharedPtr<ISlide> slide = pres->get_Slide(0);
// Získá hlavní sekvenci snímku.
System::SharedPtr<ISequence> sequence = slide->get_Timeline()->get_MainSequence();
for (auto&& effect : sequence)
{
System::SharedPtr<IAudio> sound = effect->get_Sound();
if (sound == nullptr)
continue;
auto audio = sound->get_BinaryData();
}
Po animaci
Aspose.Slides pro C++ vám umožňuje změnit vlastnost After animation (Po animaci) animačního efektu.
This is the Animation Effect pane and extended menu in Microsoft PowerPoint:

Rozbalovací seznam After animation v PowerPointu odpovídá těmto vlastnostem:
- Vlastnost set_AfterAnimationType() , která popisuje typ After animation :
- PowerPoint More Colors odpovídá typu AfterAnimationType.Color ;
- PowerPoint Don’t Dim odpovídá typu AfterAnimationType.DoNotDim (výchozí typ po animaci);
- PowerPoint Hide After Animation odpovídá typu AfterAnimationType.HideAfterAnimation ;
- PowerPoint Hide on Next Mouse Click odpovídá typu AfterAnimationType.HideOnNextMouseClick ;
- Vlastnost set_AfterAnimationColor() , která definuje formát barvy po animaci. Tato vlastnost funguje ve spojení s typem AfterAnimationType.Color. Pokud typ změníte na jiný, barva po animaci bude vymazána.
// Vytvoří instanci třídy prezentace, která představuje soubor prezentace
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimImage_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Získá první efekt hlavní sekvence
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);
// Změní typ po animaci na Color
firstEffect->set_AfterAnimationType(AfterAnimationType::Color);
// Nastaví barvu po animaci
firstEffect->get_AfterAnimationColor()->set_Color(System::Drawing::Color::get_AliceBlue());
// Zapíše soubor PPTX na disk
pres->Save(u"AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
Animovat text
Aspose.Slides poskytuje následující vlastnosti, které umožňují práci s blokem Animate text animačního efektu:
- set_AnimateTextType() , která popisuje typ animovaného textu efektu. Text tvaru může být animován:
- Vše najednou (AnimateTextType.AllAtOnce typ)
- Po slově (AnimateTextType.ByWord typ)
- Po písmenu (AnimateTextType.ByLetter typ)
- set_DelayBetweenTextParts() , nastavuje prodlevu mezi částmi animovaného textu (slovy nebo písmeny). Kladná hodnota udává procento trvání efektu. Záporná hodnota udává prodlevu v sekundách.
Takto můžete změnit vlastnosti Effect Animate text:
- Použít nebo získat animační efekt.
- Nastavte vlastnost set_BuildType() na hodnotu BuildType.AsOneObject , čímž vypnete režim animace By Paragraphs.
- Nastavte nové hodnoty pro vlastnosti set_AnimateTextType() a set_DelayBetweenTextParts().
- Uložte upravený soubor PPTX.
// Vytvoří instanci třídy prezentace, která představuje soubor prezentace.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimTextBox_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Získá první efekt hlavní sekvence
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);
// Změní typ textové animace efektu na "As One Object"
firstEffect->get_TextAnimation()->set_BuildType(BuildType::AsOneObject);
// Změní typ animovaného textu efektu na "By word"
firstEffect->set_AnimateTextType(AnimateTextType::ByWord);
// Nastaví prodlevu mezi slovy na 20% trvání efektu
firstEffect->set_DelayBetweenTextParts(20.0f);
// Zapíše soubor PPTX na disk
pres->Save(u"AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
Často kladené dotazy
Jak mohu zajistit, že animace zůstanou zachovány při publikování prezentace na web?
Export to HTML5 a povolte options zodpovědné za animace shape a transition. Prostý HTML animace snímků nepřehraje, zatímco HTML5 ano.
Jak ovlivňuje změna z-order (pořadí vrstev) tvarů animaci?
Animace a pořadí vykreslování jsou nezávislé: efekt řídí časování a typ objevování/zmizení, zatímco z-order určuje, co co překrývá. Viditelný výsledek je definován jejich kombinací. (Toto je obecné chování PowerPointu; model efektů a tvarů Aspose.Slides následuje stejnou logiku.)
Existují omezení při konverzi animací do videa u některých efektů?
Obecně jsou animace podporovány, ale v ojedinělých případech nebo u specifických efektů může dojít k odlišnému vykreslení. Doporučuje se otestovat s efekty, které používáte, a s verzí knihovny.